PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP5, move_uploaded_file


Jürg
24.01.2006, 20:50:14
Ich will ein Bild mit PHP5 hochladen.
Dabei habe ich fast alle versucht (Stundenlang!). Stand z. Z:
<?php
if ($_POST['submit']) {
$datei = $_FILES['datei'] ;
move_uploaded_file( $datei , 'temp_bild/'.$datei ) ;
}

echo '
<form method="post" action="'.$_SERVER['PHP_SELF'].'" enctype="multipart/form-data">
<input type="file" name="datei" />
<input type="submit" value="hochladen" name="submit" />
</form>
';
?>
Das Verzeichnis 'temp_bild' hat CHMOD 777, und ist im Verzeichnis in dem das Skript ist.
Was mache ich falsch?

vt1816
24.01.2006, 21:16:35
bool move_uploaded_file ( string filename, string destination )

Diese Funktion prüft, ob die mit filename bezeichnete Datei eine gültige Upload-Datei ist (d.h., dass sie mittels PHP's HTTP POST Upload-Mechanismus upgeloaded wurde). Ist die Datei gültig, wird sie zum in destination bezeichneten Dateinamen verschoben.

Wenn filename keine gültige Datei ist, wird keine Aktion ausgeführt, und move_uploaded_file() gibt FALSE zurück.

Wenn filename eine gültige Datei ist, jedoch aus irgendeinem Grund nicht verschoben werden kann, wird keine Aktion ausgeführt, und move_uploaded_file() gibt FALSE zurück. Zusätzlich wird eine Warnung ausgegeben.

Diese Prüfung ist speziell dort interessant, wo irgendeine Aktion mit upgeloadeten Dateien deren Inhalt dem User zugänglich machen könnte (oder auch anderen Usern auf dem selben System).

Anmerkung: Wenn Safe Mode aktiviert ist, überprüft PHP, ob die Dateien/Verzeichnisse die mit dem Skript bearbeitet werden sollen, die gleiche UID (Eigentümer) haben wie das Skript selbst.

Anmerkung: move_uploaded_file() ist von den normalen Safe Mode UID-Einschränkungen nicht betroffen. Dies ist nicht unsicher, da move_uploaded_file() nur mit via PHP hochgeladenen Dateien arbeitet. Was gibt die Funktion zurück? Gib mal den vollständigen Pfad an!

Jürg
24.01.2006, 21:24:17
Danke. Aber es wird garnichts zurückgegeben.

vt1816
24.01.2006, 22:07:46
if ($_POST['submit']) {
$pfad = $_SERVER['DOCUMENT_ROOT'] .'/temp_bild/' .$_FILES['datei']['name'];
move_uploaded_file( $_FILES['datei']['tmp_name'] , $pfad ) ;
}... sollte es jetzt aber bringen!

Jürg
24.01.2006, 22:26:14
Geht leider auch nicht. Ich werde mit dem Provider reden.

vt1816
24.01.2006, 22:31:29
Versteh ich nicht - hier läufts problemlos. Kommt eine Fehlermeldung? Lass Dir mal die einzelnen Bestandteile mittels 'echo' ausgeben.

Jürg
24.01.2006, 22:43:41
Das habe ich gemacht, bringt nichts, es müsste stimmen.
Fehlermeldungen gibt es keine.
Danke

vt1816
24.01.2006, 23:05:25
Siehe hier.
Beachte $_FILES['datei']['tmp_name'] und $_FILES['datei']['tmp_name']!

feuervogel
24.01.2006, 23:08:22
vielleicht steht hier was dabei:

http://bugs.php.net/bug.php?id=30924
http://bugs.php.net/bug.php?id=32644
http://bugs.php.net/bug.php?id=30858
http://bugs.php.net/bug.php?id=28395
http://bugs.php.net/bug.php?id=30306

meikel (†)
24.01.2006, 23:22:25
Was mache ich falsch?
a. Du postest keine Fehlermeldung. Konfiguriere Deine Kiste so, daß Fehler angezeigt werden.
b. Du verwendest keine Fehlerabfragen:
zB.
- ist das File eingetroffen oder gab es einen Fehler? [_] ja [_]nein
- ist die Quelle lesbar? [_] ja [_]nein

Wenn Du move_* verwendest:
- ist die Quelle beschreibbar? [_] ja [_]nein <- Du willst das temporäre File ja löschen.
- ist das Ziel beschreibbar? [_] ja [_]nein

Falls die Datei schon existiert:
- ist die Datei überschreibbar? [_] ja [_]nein

vt1816
24.01.2006, 23:24:23
Das habe ich gemacht, bringt nichts, es müsste stimmen.
Fehlermeldungen gibt es keine.
DankeDeine Datei 1343.jpg ist angekommen.

meikel (†)
24.01.2006, 23:29:15
Deine Datei 1343.jpg ist angekommen.
Obacht:
if ($_POST['submit']) {
Das zeigt nur an, daß der User auf den Knopp gedrückt hat. Ob das File wirklich angekommen ist, ist davon abhängig:
http://www.php.net/manual/de/features.file-upload.php#features.file-upload.post-method

Eventuelle aber nicht auszuschließende Fehler stehen in $_FILES['userfile']['error']

Jürg
27.01.2006, 22:38:39
Die Lösung ist folgende.
Der Upload hat auf mehrere Arten immer funktioniert. Das Problem waren die Rechte. Den nach dem Hochladen schaute ich immer per FTP, ob die Datei angekommen war. Das ging aber bei der entsprechenden Einstellung nicht. Hingegen konnte die Datei immer in Browser betrachtet werden. Nur das muss man wissen.