Hankman
Erfahrenes Mitglied
Hi Leute,
ich bin gerade dabei eine Upload-Funktion für Fotos in einer Homepage einzubinden.
Den eigentlichen Upload habe ich mit inaflashuploader realisiert - funktioniert super, kann ich jedem empfehlen!
Die Bilder werden also in einem Ordner auf dem Server abgelegt.
Mit PHP möchte ich nun von allen Bildern in diesem Ordner ein Thumbnail erstellen, sowie das Bild verkleinert speichern, wenn nötig (breiter als 900)
Das funktioniert auch alles.
Etwas problematisch wird die Sache ab 20-30 Bildern. Viele Browser warten ja nicht beliebig lang auf die Seite, sondern hören irgendwann auf zu laden. So bricht der Vorgang dann leider mittendrin ab:
Wenn nur die Ausgabe der Seite abbräche - ok. Aber leider bleiben auch die bis dahin nicht bearbeiteten Bilder zurück.
Hier noch der Code:
Das Memory-Limit, sowie die Ausführungszeit fürs Skript habe ich ausreichend per php.ini erhört, das sollte kein Problem sein - sonst käme ja auch eine Fehlermeldung.
Hat jemand eine Idee, wie ich das Skript verbessern kann? Oder bleibt mir nur die Alternative auf AJAX umzustellen? Wenn ja, hat jemand zufällig ein passendes Skript zur Hand? =)
Schonmal vielen Dank für jede Hilfe und viele Grüße,
Nico
ich bin gerade dabei eine Upload-Funktion für Fotos in einer Homepage einzubinden.
Den eigentlichen Upload habe ich mit inaflashuploader realisiert - funktioniert super, kann ich jedem empfehlen!
Die Bilder werden also in einem Ordner auf dem Server abgelegt.
Mit PHP möchte ich nun von allen Bildern in diesem Ordner ein Thumbnail erstellen, sowie das Bild verkleinert speichern, wenn nötig (breiter als 900)
Das funktioniert auch alles.
Etwas problematisch wird die Sache ab 20-30 Bildern. Viele Browser warten ja nicht beliebig lang auf die Seite, sondern hören irgendwann auf zu laden. So bricht der Vorgang dann leider mittendrin ab:
Wenn nur die Ausgabe der Seite abbräche - ok. Aber leider bleiben auch die bis dahin nicht bearbeiteten Bilder zurück.
Hier noch der Code:
PHP:
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if (($file != '.') && ($file != '..')) {
if (is_file($dir.$file)) {
$bildid++;
$i++;
$rang++;
// Bildgrößen festlegen
$thumbbreite = 130;
$bildbreite = 900;
// Bilddaten feststellen
$size = getimagesize("$dir"."$file");
$breite = $size[0];
$hoehe = $size[1];
$thumbhoehe = intval($hoehe*$thumbbreite/$breite);
if ($breite > $bildbreite) {
$bildhoehe = intval($hoehe*$bildbreite/$breite);
} else {
$bildhoehe = $hoehe;
$bildbreite = $breite;
}
// Thumbnail erstellen
$thumbnail = $ausgabe.$bildid."_tn.jpg";
$altesBild=ImageCreateFromJPEG("$dir"."$file");
$neuesBild=imagecreatetruecolor($thumbbreite,$thumbhoehe);
ImageCopyResampled($neuesBild,$altesBild,0,0,0,0,$thumbbreite,$thumbhoehe,$breite,$hoehe);
if (ImageJPEG($neuesBild,$thumbnail)) {
$success_thumb = true;
}
// Bild erstellen
$bild = $ausgabe.$bildid.".jpg";
$altesBild=ImageCreateFromJPEG("$dir"."$file");
$neuesBild=imagecreatetruecolor($bildbreite,$bildhoehe);
ImageCopyResampled($neuesBild,$altesBild,0,0,0,0,$bildbreite,$bildhoehe,$breite,$hoehe);
if (ImageJPEG($neuesBild,$bild)) {
$success_bild = true;
}
echo('['.$i.' von '.$gesamtanzahl.'] Die Datei <strong>'.$file.'</strong> wurde ');
unlink($dir.$file);
if ($success_bild) {
if ($success_thumb) {
$abfrage = "INSERT INTO bilder (bildid, siteid, beschreibung, datum, rang, thumb_width, thumb_height) VALUES ('$bildid', '$id', '$sbeschreibung', '$datum', '$rang', '$thumbbreite', '$thumbhoehe')";
if (mysql_query($abfrage)) {
echo ('verarbeitet und in der Datenbank gespeichert.<br />');
} else {
echo ('verarbeitet, jedoch trat beim Speichern in der Datenbank ein Fehler auf:<br /><strong>'.mysql_error().'</strong><br />');
$fehler = true;
}
}
} else {
echo ('nicht verarbeitet und gespeichert - versuche es Bitte nochmal.');
$fehler = true;
}
}
}
}
} closedir($dh);
}
Hat jemand eine Idee, wie ich das Skript verbessern kann? Oder bleibt mir nur die Alternative auf AJAX umzustellen? Wenn ja, hat jemand zufällig ein passendes Skript zur Hand? =)
Schonmal vielen Dank für jede Hilfe und viele Grüße,
Nico