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

Hallo,

Ich habe ein Problem beim Fileupload mit 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.

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)

Wie muss ich das schreiben, dass das Script von meiner Festplatte hochläd und nicht versucht die Datei relativ von der Position des Skriptes aus zu finden.

Vielen Dank schon mal

Thomas

  1. Moin,

    Wie muss ich das schreiben, dass das Script von meiner Festplatte hochläd und nicht versucht die Datei relativ von der Position des Skriptes aus zu finden.

    Das Skript lädt in den allermeisten Fällen gar nichts hoch, sondern der Browser tut das. Und da die Browser in vielen Fällen von einer größeren Entwicklergemeinschaft mit eigener Quality Assurance-Abteilung hergestellt werden (naja, manchmal kommen mir da schon Zweifel) ist es unwahrscheinlich, dass er das falsch macht.

    Das riecht eher so, als würde dein Skript nicht auf die richtige Datei zugreifen? Du greifst nicht zufällig auf $_FILES['foobar']['name'] statt auf $_FILES['foobar']['tmp_name'] zu? Die Doku unter http://www.php.net/manual/en/features.file-upload.php hilft dir nicht weiter?

    Tja, dann solltest du wohl besser deinen Code oder einen URL dorthin posten, meine Tarotkarten sind nämlich grade in der Reinigung.
    (Oder hat jemand zufällig noch ein zweites Set dabei und kann mir eins abgeben? ;-)

    --
    Henryk Plötz
    Grüße von der Ostsee
  2. 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

    1. Hm ja danke ... wenn man weiss, dass man das Formular posten muss und dann mit $_FILES arbeiten kann, dann klappts auch...;-)

      Dankeschön

      Thomas