upload script

cranc1

Grünschnabel
Hallo,

hab hier den code für ein upload script, welches gleichzeitg die Bilder skaliert...
Jedoch funktioniert das script nicht...

Kann mir da evtl jemand auf die Sprünge helfen?

PHP:
<?
// Grundeinstellungen festlegen
$pref_device = "Bilder/";  // Uploadpfad (absolut) vom Root aus gesehen
$pref_maxsize = 40*1024; // Maximale Dateigroesse in Bytes (KB x 1024)
$max_x = 800; // maximale bildbreite in px
$max_y = 600; // maximale bildhoehe in px
$pref_maxlength = 40; // Maximale Laenge des Dateinamens inklusive Dateiendung

if (isset($_FILES['userpic'])) {
$filename = $_FILES['userpic']['name'];
$file = $_FILES['userpic']['tmp_name'];

#################################################################

### dateigröße anpassen ###
// bild verkleinern, wenn zu groß
$tmpfile[1] = $file;
for($i=1;;$i++){
    $file_size = filesize($tmpfile[$i]);
    if($file_size > $pref_maxsize){
        $tmpfile[$i+1] = tempnam($pref_device, $filename.'_'.$i);
        // bildinfo
        $picnfo = GetImageSize($tmpfile[$i]);
        $new_width = $picnfo[0] / 20 * 19;
        $new_height = $picnfo[1] / 20 * 19;
        // leeres bild erzeugen
        $destimg = ImageCreateTrueColor($new_width, $new_height) or die("problem in creating empty image");
        // temp. bild einlesen
        switch ($picnfo[2]) {
            case 1:
                $srcimg = ImageCreateFromGIF($tmpfile[$i]) or die("Problem In opening Source Image");
                break;
            case 2:
                $srcimg = ImageCreateFromJPEG($tmpfile[$i]) or die("Problem In opening Source Image");
                break;
            case 3:
                $srcimg = ImageCreateFromPNG($tmpfile[$i]) or die("Problem In opening Source Image");
                break;
            default:
                die ("extension not supported. only jpg, jpeg, gif and png!");
        }
        // verkleinertes temp. bild ins leere bild kopieren
        ImageCopyResized($destimg, $srcimg, 0, 0, 0, 0, $new_width, $new_height, $picnfo[0], $picnfo[1]) or die("Problem In resizing");
        // speichern
        switch ($picnfo[2]) {
            case 1:
                ImageGIF($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
                break;
            case 2:
                ImageJPEG($destimg,$tmpfile[$i+1],100) or die("Problem In outputting");
                break;
            case 3:
                ImagePNG($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
                break;
        }
        // temp datei löschen
        unlink ($tmpfile[$i]);
    }
    
    else{
        break;
    }
}

$picnfo = GetImageSize($tmpfile[$i]);

### bildmaße anpassen ###

// neue ausmaße berechnen, falls zu groß
if ($picnfo[0] > $max_x){
    $newwidth = $max_x;
    $resize = true;
}
else{
    $newwidth = $picnfo[0];
    $resize = false;
}
$newheight = round($picnfo[1] / $picnfo[0] * $newwidth);

if ($newheight > $max_y) {
    $newheight = $max_y;
    $newwidth = round($newheight * $picnfo[0] / $picnfo[1]);
    $resize = true;
}

if ($resize == true){
// neue temp datei anlegen
$tmpfile[$i+1] = tempnam($pref_device, $filename.'_'.$i);
// leeres bild erzeugen
$destimg = ImageCreateTrueColor($newwidth,$newheight) or die("Problem In Creating image");

// temp. bild einlesen
switch ($picnfo[2]) {
    case 1:
        $srcimg = ImageCreateFromGIF($tmpfile[$i]) or die("Problem In opening Source Image");
        break;
    case 2:
        $srcimg = ImageCreateFromJPEG($tmpfile[$i]) or die("Problem In opening Source Image");
        break;
    case 3:
        $srcimg = ImageCreateFromPNG($tmpfile[$i]) or die("Problem In opening Source Image");
        break;
    default:
        die ("extension not supported. only jpg, jpeg, gif and png!");
}

// verkleinertes temp. bild ins leere bild kopieren
ImageCopyResized($destimg,$srcimg,0,0,0,0,$newwidth,$newheight,$picnfo[0],$picnfo[1]) or die("Problem In resizing");

// speichern
switch ($picnfo[2]) {
    case 1:
        ImageGIF($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
        break;
    case 2:
        ImageJPEG($destimg,$tmpfile[$i+1],100) or die("Problem In outputting");
        break;
    case 3:
        ImagePNG($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
        break;
        }
    // temp datei löschen
    unlink ($tmpfile[$i]);
    
    $i++;
}
$usertmpfile = $tmpfile[$i];

$verkleinerungen = $i - 1;

################################################################# 
// Daten entsprechend Grundeinstellungen ueberpruefen

// Sonderzeichen bearbeiten
$filename = strtr($filename, "ÄÖÜäöü", "AOUaou"); // Deutsche Umlaute umwandeln
$filename = strtr($filename, "ß", "s"); // SZet umwandeln
$filename = str_replace(" ","_",$filename); // Leerzeichen durch _ ersetzen

// Dateiname zu lang?
if (strlen($filename) > $pref_maxlength) die ("Der Dateiname ist zu lang! Maximal $pref_maxlength Zeichen erlaubt!");

// Datei existiert bereits? Umbenennen!
if (file_exists($pref_device.$filename)) {
    $ext = substr(strrchr($filename,"."),1);
    for ($i = 1;;) {
        $filename = str_replace ('.'.$ext, '', $filename);
        $filename .= '_'.$i.'.'.$ext;
        if (!file_exists($pref_device.$filename)) break;
        else {
            $filename = str_replace ('_'.$i.'.'.$ext, '', $filename);
            $filename = $filename . '.'.$ext;
            $i++;
        }
    }
}

// Datei in Zielverzeichnis verschieben und CHMOD auf 604 setzen
copy ($usertmpfile,$pref_device.$filename);
// temp datei löschen
unlink ($usertmpfile);
chmod($pref_device.$filename, 0604);
echo 'Die Datei wurde erfolgreich ';
if($verkleinerungen > 1) echo 'nach '.$verkleinerungen.' Verkleinerungen ';
echo 'hochgeladen!<br /><a href="'.$pref_device.$filename.'">'.$filename.'</a>';

}
else {
echo <<<form
<form enctype="multipart/form-data" method="post">
<input type="file" name="userpic" />
<input type="submit" name="confirm" value="upload" />
</form>
form;
}
?>


Hier die Fehlermeldung
PHP:
Warning: copy(Bilder/Unbenannt-1_Kopie.jpg) [function.copy]: failed to open stream: No such file or directory in /www/htdocs/w008d016/cms/blog/upload.php on line 158

Warning: chmod() [function.chmod]: No such file or directory in /www/htdocs/w008d016/cms/blog/upload.php on line 161
Die Datei wurde erfolgreich nach 39 Verkleinerungen hochgeladen!
Unbenannt-1_Kopie.jpg

das Problem liegt wahrs an dieser Stelle .. aber ich komm einfach nicht dahinter :confused: !!:confused::confused:

PHP:
// Datei in Zielverzeichnis verschieben und CHMOD auf 604 setzen
copy ($usertmpfile,$pref_device.$filename);
// temp datei löschen
unlink ($usertmpfile);
chmod($pref_device.$filename, 0604);
echo 'Die Datei wurde erfolgreich ';
if($verkleinerungen > 1) echo 'nach '.$verkleinerungen.' Verkleinerungen ';
echo 'hochgeladen!<br /><a href="'.$pref_device.$filename.'">'.$filename.'</a>';


Vielen Dank !
 
Die Fehlermeldungen sollten dir eigentlich schon sagen, wo der Fehler liegt: "Bilder/Unbenannt-1_Kopie.jpg" wird, ausgehend von der relativen Lage, nicht gefinden. Der Korrektheit halber solltest du das Zielverzeichnis durch eine komplette und absolute Pfadangabe ersetzen.
PHP:
$pref_device = "Bilder/";  // Uploadpfad (absolut) vom Root aus gesehen
Ist nicht absolut, sondern relativ zu dem Verzeichnis, dessen Script zuerst aufgerufen wurde.
Eine absolute Pfadangabe zeichnet sich durch einen führenden Slash aus, aber ich bezweifle, dass /Bilder auf der nullten Ebene im Filesystem liegt :rolleyes:
PHP:
$pref_device = "/srv/www/etcectect/httpdocs/Bilder/";
Das wäre zB eine absolute Pfadangabe, oder
PHP:
$pref_device = realpath(dirname(__FILE__)) . '/Bilder/';

btw: copy wurde für Dateiuploads durch die Funktion [phpf]move_uploaded_file[/phpf] "ersetzt" ;)
 

Neue Beiträge

Zurück