WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 12.12.2004, 11:40   #1
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Frage Dateifunktionen in PHP

hi @all,

mein problem, bei dem ich hoffe, das man mir hier helfen kann:

mit php habe ich eine routine geschrieben, mit der ich über eine html-form eine datei auf den webserver übertragen will. soweit funktioniert mein code auch ganz gut, bis auf eine kleinigkeit: ich möchte nur dateien mit einer bestimmten dateiendung übertragen, beispielsweise nur .gif-dateien. im input-tag habe ich sehr wohl den parameter accept="image/gif" angegeben, jedoch lässt sich mein browser (ie6) damit nicht dazu hinreißen, tatsächlich nur .gif-dateien zu übertragen. und über mein php-script lässt sich hier auch nichts machen, da ich ja lediglich das temporäre file am webserver mitgeteilt bekomme - und dieses hat immer die dateiendung .tmp, ist also nicht unterscheidbar. welche 'tricks' kennt ihr für dieses problem....?

achja, nochwas: mitunter würde ich die übertragene datei auch wieder löschen wollen. nur habe ich in php keine funktion gefunden, die das macht. alle meine dokumentationen diesbezüglich offenbaren mir nicht, wie's geht. ideen dazu....?

thanks!
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen.
Satan_666 ist offline   Mit Zitat antworten
Alt 12.12.2004, 12:03   #2
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

ad löschen:
http://www.selfphp.info/funktionsref...nen/unlink.php

für sonstiges würd ich auch mal selfphp durchblättern:
http://www.selfphp.info/funktionsref...em_funktionen/

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 13.12.2004, 11:58   #3
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

danke für die links - aber dieses selfphp habe ich eh zu hause.

dass das löschen einer datei mittels unlink() gemacht wird, ist für mich ziemlich erstaunlich. wer lässt sich so einen namen für's löschen einer datei einfallen....? kein wunder, dass ich nicht fündig geworden bin.


bezüglich dem anderen problem bin ich samt selfphp nicht weiter gekommen. es gibt zwar die funktion filetype, die liefert aber immer nur '.tmp' zurück - weil ja das der filename am server ist.


für mich schaut es fast so aus, als ob ich diese prüfung auf die gewünschte dateiendung VOR dem versenden in javascript lösen müsste. nur bin ich dort auch noch nicht so firm, dass ich das aus dem ärmel schütteln könnte....
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen.
Satan_666 ist offline   Mit Zitat antworten
Alt 13.12.2004, 12:34   #4
m@rio
Master
 
Registriert seit: 10.10.2002
Beiträge: 711


Standard

http://de.php.net/manual/de/features.file-upload.php

$_FILES['userfile']['type']
Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif".
m@rio ist offline   Mit Zitat antworten
Alt 13.12.2004, 13:27   #5
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

du kannst ja mit:

$_FILES['file']['name']

(wobei 'file' bei mir der name des dateiuploadfeldes ist)

Den Dateinamen auslesen. Dann kannst du ja von hinten beginnend den String bis zum letzten Punkt auslesen -> Dateierweiterung.

Hab hier momentan keine php Testumgebung, werd zuhause mal schaun, ob es noch andere Varianten gibt.

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 13.12.2004, 13:36   #6
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

Zitat:
Original geschrieben von T.dot
du kannst ja mit:

$_FILES['file']['name']

Den Dateinamen auslesen. Dann kannst du ja von hinten beginnend den String bis zum letzten Punkt auslesen -> Dateierweiterung.

Hab hier momentan keine php Testumgebung, werd zuhause mal schaun, ob es noch andere Varianten gibt.

mfg Thomas
ich kanns im moment auch nicht checken, ob das geht - ich vermute aber, dass in $_FILES der dateiname drin steht, wie er nach dem transfer am server steht, und das ist irgend eine xxxx.tmp datei.

interessant finde ich ja auch, dass der parameter 'accept' im input-tag lediglich informellen charakter zu haben scheint. übertragen kann ich trotzdem alles, was ich will.

naja, werde heute abend eure tipps probieren....
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen.
Satan_666 ist offline   Mit Zitat antworten
Alt 13.12.2004, 13:54   #7
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

ne, in $_FILES['file']['tmp_name']; steht der Temporäre Name drin, in $_FILES['file']['name'] der wirkliche.

vielleicht gibts auch ein $_FILES['file']['extension'] - keine Ahnung

mfg Thomas

[edit]
google hilft:

$_FILES['userfile']['name']
The original name of the file on the client machine.
$_FILES['userfile']['type']
The mime type of the file, if the browser provided this information. An example would be "image/gif".
$_FILES['userfile']['size']
The size, in bytes, of the uploaded file.
$_FILES['userfile']['tmp_name']
The temporary filename of the file in which the uploaded file was stored on the server.
$_FILES['userfile']['error']
The error code associated with this file upload. ['error'] was added in PHP 4.2.0.

bzw.
http://p2p.wrox.com/topic.asp?TOPIC_ID=2629

[/edit]
T.dot ist offline   Mit Zitat antworten
Alt 14.12.2004, 08:51   #8
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Zitat:
Original geschrieben von Satan_666
dass das löschen einer datei mittels unlink() gemacht wird, ist für mich ziemlich erstaunlich. wer lässt sich so einen namen für's löschen einer datei einfallen....?
Tja, da ist es immer gut, wenn man ueber ein wenig Hintergrundwissen verfuegt.

<Sinnloses Wissen fuer mind. 500 Euro>
Das Unix-Dateisystem unterscheidet zwischen Daten, die durch eine Inode beschrieben werden und Pfadnamen, die innerhalb von Verzeichnissen auf die Inodes verweisen. Eine Inode kann dabei mehrere Pfadnamen haben, was in der Unix-Terminologie Link genannt wird.

Unter Unix ruft "rm" intern den Systemruf unlink auf, der einen solchen Link und den zugehörigen Pfadnamen entfernt. Die Inode und die Datenblöcke werden aber erst freigegeben wenn
1. der letzte Link auf eine Inode entfernt wird und
2. kein Prozess mehr auf die Daten zugreift.
http://de.wikipedia.org/wiki/Rm_(Unix)

Aus der manpage von unlink:
Zitat:
unlink löscht einen Namen aus dem Dateisystem. Wenn dieser Name der letzte Verweis auf eine Datei war und kein Prozeß die Datei geöffnet hält, wird sie gelöscht und der von ihr belegte Speicherplatz wird für die weitere Benutzung verfügbar gemacht.

Falls dieser Name der letzte Link auf die Datei war und keine Prozesse die Datei geöffnet haben, dann ist die Datei gelöscht und der benötigte Speicherplatz wieder freigegeben.

Falls der Name der letzte Link auf die Datei war, aber immer noch Prozesse die Datei geöffnet haben, bleibt die Datei bestehen bis die letzte Dateikennzahl, die sich auf die Datei bezieht, geschlossen ist.

Falls der Name auf einen symbolischen Link verwies, so ist dieser Link entfernt.

Falls der Name auf einen Socket, Fifo oder Gerät verwies, so ist der Name für dieses entfernt, aber Prozesse, die dieses Objekt geöffnet haben, können es weiterhin benutzen.
http://www.linuxinfor.com/german/man2/unlink.html
Wobei ich die englische Manpage fuer aussagekraeftiger halte: http://www.opengroup.org/onlinepubs/...ns/unlink.html
</Sinnloses Wissen fuer mind. 500 Euro>

Und Erfunden haben das in diesem Fall nicht die Schweizer, sondern vermutlich Dennis Ritchie und Ken Thompson, die Vaeter von C und UNIX.

UNIX is simple and coherent, but it takes a genius (or at any rate a programmer) to understand and appreciate the simplicity.
Dennis Ritchie
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 14.12.2004, 09:00   #9
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Also mich hat dieses Wissen keine 500€ gekostet, nur ein paar Jahre HTL

mfg Thomas
T.dot ist offline   Mit Zitat antworten
Alt 14.12.2004, 09:32   #10
Satan_666
Inventar
 
Registriert seit: 03.09.2000
Beiträge: 4.010


Standard

Zitat:
Original geschrieben von _m3
Tja, da ist es immer gut, wenn man ueber ein wenig Hintergrundwissen verfuegt.

*snipped*

thanks für die aufklärung - aber einerseits war die frage mehr ironisch gemeint und andererseits erklärt sich die namensvergabe dadurch auch nicht. ich kenne kein system außer dem sch***-unix (und deren derivate), das sich hier eine eigene (unlogische???) welt aufgebaut hat. das, was du mir hier bildlich beschrieben hast, täuscht nicht darüber hinweg, dass es sich lediglich um interne lösungen eines problemes handelt, mit der ein anwender in wahrheit nicht konfrontiert werden möchte. und ich als verwender einer höheren programmiersprache sehe absolut nicht ein, warum ich mich mit derartigen .... äh, unsinn beschäftigen muss

wohl auch ein grund, warum ich mich bislang erfolgreich gegen jede art von linux auf meinem rechner gewehrt habe. ich will effizient arbeiten und mir keine gedanken über etwaige internas des betriebssystems machen müssen.


@T.dot: hab's gestern getestet - und es funktioniert tatsächlich! thanks für die infos....
____________________________________
Für ein friedliches Zusammenleben im Forum werde ich ab sofort keine Trolle mehr füttern, und zwar unabhängig von der Sinnhaftigkeit ihrer Wortmeldungen.
Satan_666 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:31 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag