Thumbnail-Script: Fehlermeldung: tried to allocate 6400 bytes

  • PHP

  • Trekki76
  • 1341 Aufrufe 4 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Thumbnail-Script: Fehlermeldung: tried to allocate 6400 bytes

    Hallo,

    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

    1. <?
    2. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    3. // SETTINGS //
    4. $PicPath1 = "http://www.freesoft-board.to/images/orig/"; // Verzeichnis, wo die originalen Bilddateien abgespeichert sind (relativ zum Scriptpfad)
    5. $PicPath2 = "http://www.freesoft-board.to/images/"; // Verzeichnis, wo die Thumbnails abgespeichert werden (relativ zum Scriptpfad)
    6. $PicPath3 = "http://www.freesoft-board.to/images/big/"; // Verzeichnis, wo die großen Bilddateien abgespeichert werden (relativ zum Scriptpfad)
    7. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
    8. $array_types1 = array('jpg','JPG');
    9. //Einlesen Ordner 1
    10. $dir1 = opendir("$PicPath1");
    11. while (($file1 = readdir($dir1)) != false) {
    12. if (preg_match("/^index/", $file1)) continue;
    13. if (preg_match("/\.\.?$/", $file1)) continue;
    14. foreach($array_types1 as $typ) {
    15. if (preg_match("/\.".$typ."$/i", $file1))
    16. $dateien1[] = $file1;
    17. $zahl1=count($dateien1);
    18. };
    19. };
    20. // Einlesen Ordner 2
    21. $dir2 = opendir("$PicPath2");
    22. while (($file2 = readdir($dir2)) != false) {
    23. if (preg_match("/^index/", $file2)) continue;
    24. if (preg_match("/\.\.?$/", $file2)) continue;
    25. foreach($array_types1 as $typ) {
    26. if (preg_match("/\.".$typ."$/i", $file2))
    27. $dateien2[] = $file2;
    28. $zahl2=count($dateien2);
    29. };
    30. };
    31. // Unterschied zwischen den beiden Ordnern ausfindig machen
    32. $differenz= array_diff($dateien1, $dateien2);
    33. // Anz. Elemente feststellen, um die Schlaufe unten zu limitieren
    34. $anz=count($differenz);
    35. for ($i = 0; $i <= $anz; $i++) {
    36. // Leere Arrays umgehen
    37. if(!empty($differenz[$i])){
    38. $original = imagecreatefromjpeg("$PicPath1"."$differenz[$i]");
    39. $imgx=imagesx($original);
    40. $imgy=imagesy($original);
    41. // Thumbnails erstellen
    42. if($imgx < 150 && $imgy < 150 ){
    43. $neux = $imgx;
    44. $neuy = $imgy;
    45. }
    46. else{
    47. if($imgx == $imgy ){
    48. $neux = 150;
    49. $neuy = 150;
    50. $img2x = 530;
    51. $img2y = 530;
    52. }
    53. elseif($imgx >= $imgy ){
    54. $neux = 240;
    55. $neuy = 150;
    56. $img2x = 530;
    57. $img2y = 400;
    58. }
    59. else{
    60. $neux = 150;
    61. $neuy = 240;
    62. $img2x = 400;
    63. $img2y = 530;
    64. }
    65. }
    66. echo "Bild: ".$klein." als Thumbnail erstellt<br>";
    67. $klein = imagecreatetruecolor($neux, $neuy);
    68. imagecopyresized($klein, $original, 0, 0, 0, 0, $neux, $neuy, $imgx, $imgy);
    69. // Abspeichern in Ordner 2
    70. imagejpeg($klein, "$PicPath2"."$differenz[$i]");
    71. //groß
    72. $big = imagecreatetruecolor($img2x, $img2y);
    73. imagecopyresized($big, $original, 0, 0, 0, 0, $img2x, $img2y, $imgx, $imgy);
    74. imagejpeg($big, "$PicPath3"."$differenz[$i]");
    75. }}
    76. ?>
    Alles anzeigen


    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
  • Das Problem habe/hatte ich auch schon oft.

    Bei mir hilft folgendes an den Anfang des php-Skriptes:

    PHP-Quellcode

    1. ini_set('memory_limit', '64M');


    Oder eben wieviel du brauchst! Probiers mal aus, klappt garantiert...

    Der Code bewirkt die Erhöhung lediglich für dieses Skript zu dieser Zeit.
  • jjkkll schrieb:


    PHP-Quellcode

    1. ini_set('memory_limit', '64M');


    Oder eben wieviel du brauchst! Probiers mal aus, klappt garantiert...

    Der Code bewirkt die Erhöhung lediglich für dieses Skript zu dieser Zeit.


    wobei man auch dazu sagen muss, das das glaube nicht jedr hoster unterstützt, bzw zulässt die ini einstellungen im script zu "manipulieren"

    local kannst du das bei dir einfach in der php.ini regeln, da steht irgendwo der eintrag
    memory_limit

    ansonsten, probier einfach aus....

    mfg
  • Danke für die Info.

    Hoster bin ich selber (XAMPP unter Xp).

    Wie im Eingangs-Thread geschrieben, hatte ich die Memory-Angabe bereits geändert, ohne Wirkung.

    Jetzt hab ich

    PHP-Quellcode

    1. <html>
    2. <meta http-equiv="refresh" content="3"; URL="gal2.php">
    3. </html>


    an den Script-Anfang gestellt.
    Durch das neuladen der Seite werden zwar mehr Bilder bearbeitet (pro laden ein Bild) , aber die Fehlermeldung bleibt immer bestehen.
    Wenigstens muß ich so nicht immer mit F5 von Hand neu laden.

    Weitere Vorschläge werden gerne angenommen.

    Gruß

    Trekki