seit dem Umstieg auf PHP5 habe ich mit meinem Thumbnail-Script ein Problem.
Ich erhalte ständig die Meldung:
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 6400 bytes) in D:\apache\httpdocs\bonnroses\galerie\bonnduisdorf09\gal2.php on line 42
Das Script lief unter PHP 4.2.2 fehlerfrei, hatte es auf mehreren Webseiten eingesetzt.
Die Bilder haben Auflösungen zwischen 640*480 und 3000*2000 Pixel, je nachdem wer die aufgenommen hat.
Das Script:
PHP-Quellcode
- <?
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // SETTINGS //
- $PicPath1 = "http://www.freesoft-board.to/images/orig/"; // Verzeichnis, wo die originalen Bilddateien abgespeichert sind (relativ zum Scriptpfad)
- $PicPath2 = "http://www.freesoft-board.to/images/"; // Verzeichnis, wo die Thumbnails abgespeichert werden (relativ zum Scriptpfad)
- $PicPath3 = "http://www.freesoft-board.to/images/big/"; // Verzeichnis, wo die großen Bilddateien abgespeichert werden (relativ zum Scriptpfad)
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
- $array_types1 = array('jpg','JPG');
- //Einlesen Ordner 1
- $dir1 = opendir("$PicPath1");
- while (($file1 = readdir($dir1)) != false) {
- if (preg_match("/^index/", $file1)) continue;
- if (preg_match("/\.\.?$/", $file1)) continue;
- foreach($array_types1 as $typ) {
- if (preg_match("/\.".$typ."$/i", $file1))
- $dateien1[] = $file1;
- $zahl1=count($dateien1);
- };
- };
- // Einlesen Ordner 2
- $dir2 = opendir("$PicPath2");
- while (($file2 = readdir($dir2)) != false) {
- if (preg_match("/^index/", $file2)) continue;
- if (preg_match("/\.\.?$/", $file2)) continue;
- foreach($array_types1 as $typ) {
- if (preg_match("/\.".$typ."$/i", $file2))
- $dateien2[] = $file2;
- $zahl2=count($dateien2);
- };
- };
- // Unterschied zwischen den beiden Ordnern ausfindig machen
- $differenz= array_diff($dateien1, $dateien2);
- // Anz. Elemente feststellen, um die Schlaufe unten zu limitieren
- $anz=count($differenz);
- for ($i = 0; $i <= $anz; $i++) {
- // Leere Arrays umgehen
- if(!empty($differenz[$i])){
- $original = imagecreatefromjpeg("$PicPath1"."$differenz[$i]");
- $imgx=imagesx($original);
- $imgy=imagesy($original);
- // Thumbnails erstellen
- if($imgx < 150 && $imgy < 150 ){
- $neux = $imgx;
- $neuy = $imgy;
- }
- else{
- if($imgx == $imgy ){
- $neux = 150;
- $neuy = 150;
- $img2x = 530;
- $img2y = 530;
- }
- elseif($imgx >= $imgy ){
- $neux = 240;
- $neuy = 150;
- $img2x = 530;
- $img2y = 400;
- }
- else{
- $neux = 150;
- $neuy = 240;
- $img2x = 400;
- $img2y = 530;
- }
- }
- echo "Bild: ".$klein." als Thumbnail erstellt<br>";
- $klein = imagecreatetruecolor($neux, $neuy);
- imagecopyresized($klein, $original, 0, 0, 0, 0, $neux, $neuy, $imgx, $imgy);
- // Abspeichern in Ordner 2
- imagejpeg($klein, "$PicPath2"."$differenz[$i]");
- //groß
- $big = imagecreatetruecolor($img2x, $img2y);
- imagecopyresized($big, $original, 0, 0, 0, 0, $img2x, $img2y, $imgx, $imgy);
- imagejpeg($big, "$PicPath3"."$differenz[$i]");
- }}
- ?>
Das Script vergleicht den Inhalt von 2 Ordnern.
Wenn im Ordner "Orig" ein Bild mehr als im Ordner "Image" ist, wird ein Thumbnail sowie ein etwas größeres Bild im Ordner "Big" erstellt.
Testweise hatte ich in der php.ini die Angabe "memory_limit = 64M" mal auf 128 und sogar auf 256 angehoben, hat jedoch keine Änderung gebracht.
Gruß
Trekki