molily: File-upload von der eigenen Festplatte (Problem mit fopen)

Beitrag lesen

Hallo, Thomas,

Ich habe ein Problem beim Fileupload mit PHP.

Meinst du POST-Uploads (http://de.php.net/manual/de/features.file-upload.php)?

Wenn ich die PHP-Skripte auf den Server hochlade und dann eine Datei hochladen will, dann versucht das Skript immer von dem Verzeichnis, in dem es sich befindet, die gewünschte Datei hochzuladen.

Was für ein Upload meinst du? Lies du die POST-Daten direkt aus dem Stream? (Wenn ja, wieso?)

Fehlermeldung:

Warning: fopen("C:\test.txt", "rb") - No such file or directory in /server_root/php-codes/mail/upload.php on line 17
(Zeile 17 steht der fopen-Befehl)

Was macht eine fopen-Anweisung überhaupt in einem Script, welches ausschließlich mit $_FILES und move_uploaded_file() agieren sollte? Wie transferierst du die Datei überhaupt auf den Server, und woher kommt der String C:\test.txt, aus $_FILES?

Wie muss ich das schreiben, dass das Script von meiner Festplatte hochläd

Auf welcher Seite willst du das Script denn anwenden, clientseitig oder client- und serverseitig? In der Regel werden Uploads über den Browser via POST gelöst (wie eingangs erwähnt), dabei schickt ein HTTP-Client über ein HTML-Formular die Dateien an das Serverscript. Dabei lädt das Script nichts hoch, sondern nimmt nur entgegen (beziehungsweise verschiebt ein paar Dateien, die PHP-Engine macht im Grunde alles eigenständig).
Falls es dir um ein Script geht, welches tatsächlich hochlädt: Du kannst den POST-Request auch selbst über ein PHP-Script erstellen und über einen Socket senden (http://www.dclp-faq.de/q/q-code-upload.html), sodass auf dem Server ein gewöhnliches POST-Uploadscript die Dateien entgegennimmt. Eine andere Möglichkeit wären die FTP-Funktionen (http://de.php.net/manual/de/ref.ftp.php). Diese Scripts würdest du dann auf deinem lokalen PHP-Interpreter ausführen.
Aber bei all diesen Möglichkeiten wird kein Script auf dem Server ausgeführt, welches ein fopen() benötigt.

und nicht versucht die Datei relativ von der Position des Skriptes aus zu finden.

Keine Ahnung, ob dir das hilft, aber wenn du aus einem Pfadnamen den Dateinamen extrahieren willst, nimm basename() http://de.php.net/manual/de/function.basename.php.

Entweder ich habe dich komplett missverstanden, oder du kennst die Funktionsweise von POST-Dateiuploads nicht. Eine fopen-Anweisung, welche in einem Script auf dem Server ausgeführt wird, hat natürlich keinen Zugriff auf die Festplatte des HTTP-Clients, deshalb verstehe ich nicht, wieso du eine fopen-Anweisung benutzt und zudem einen Pfadnamen benutzt, welcher per se nicht funktionieren kann, da er sich auf das Dateisystem des Servers und nicht des Clients bezieht.

Grüße,
Mathias