Problem mit Bild-Upload
Stefan
- php
Hallo,
ich habe Probleme mit Bild-Upload unter PHP.
Hier erst mal etwas Code
<form action="upl_image.php" method="post" enctype="multipart/form-data">
<input type="file" name="userfile">
<input type="submit">
</form>
Die Datei upl_image.php:
<?php
var_dump($_FILES);
$temp_name = $_FILES["userfile"]["tmp_name"];
print "$temp_name<br>";
print "<img src="$temp_name"><br>";
$img_size = $_FILES["userfile"]["size"];
$img_arr = getimagesize($temp_name);
print "$img_size<br>";
print "$img_arr[2]<br>";
print "$img_arr[3]<br>";
?>
Die Ausgabe sieht dann so aus:
array(1) { ["userfile"]=> array(5) { ["name"]=> string(8) "test.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpIPfKVo" ["error"]=> int(0) ["size"]=> int(9535) } } /tmp/phpIPfKVo
[Symbol für nicht gefundene Grafik]
9535
2
width="400" height="210"
Der Fehler ist, dass kein Bild angezeigt wird, sondern nur ein Platzhalter für einen img-Tag, der auf eine nicht vorhandene Datei verweist.
Füge ich ein
rename($temp_name,"userfiles/test.jpg");
ein, so erhalte ich folgende Fehlermeldung:
Warning: rename() failed (Invalid cross-device link) in [...] on line [...]
Also, ich kriege eine Datei, bei der getimagesize() korrekt funktioniert, aber ich kann sie weder im Browser darstellen, noch umkopieren.
Stefan
Moin!
array(1) { ["userfile"]=> array(5) { ["name"]=> string(8) "test.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpIPfKVo" ["error"]=> int(0) ["size"]=> int(9535) } } /tmp/phpIPfKVo
[Symbol für nicht gefundene Grafik]
9535
2
width="400" height="210"Der Fehler ist, dass kein Bild angezeigt wird, sondern nur ein Platzhalter für einen img-Tag, der auf eine nicht vorhandene Datei verweist.
Logisch. Die hochgeladene Grafik wird in der Regel in einem temporären Verzeichnis abgelegt, welches vom Web aus nicht zugänglich ist - siehe "tmp_name", und außerdem wird diese temporäre Datei nach Ende des Skriptes gelöscht - sie existiert also dann schon nicht mehr, wenn der Browser die komplette HTML-Seite kennt und dann die Grafik nachladen will.
Füge ich ein
rename($temp_name,"userfiles/test.jpg");
ein, so erhalte ich folgende Fehlermeldung:
Warning: rename() failed (Invalid cross-device link) in [...] on line [...]
Du kannst die Datei nicht einfach umbenennen, weil ein Umbenennen im Prinzip ein Verschieben ist - und das geht offenbar nicht so einfach.
Benutze die Funktion move_uploaded_file() und guck dir bei http://www.php.net mal die Beispiele und Userbeiträge an - da ist eigentlich ausreichend demonstriert, wie es geht.
- Sven Rautenberg