Stefan: Problem mit Bild-Upload

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

  1. 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

    --
    Signatur oder nicht Signatur - das ist hier die Frage!