Ankündigung

Einklappen
Keine Ankündigung bisher.

probleme mit bilderupload imagecreatefromjpeg() php script

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • probleme mit bilderupload imagecreatefromjpeg() php script

    Hey, ich hab hier ein altes problem.
    Ich hab schon alles durchsucht, komme aber einfahc nciht weiter. Ich habe hier ein Bild mit 534 kb, 2260*1699px Gesamtgröße. Das ganze soll über ImageCreateFromJPEG verkleinert und auf einen webspace gestellt werden. Dummerweise passiert einfach gar nichts. Gar nichts heißt, der Server bricht ohne erdenkbaren Grund ab bei:

    PHP-Code:
    $oldpic = @ImageCreateFromJPEG($DatTemp) or die("<b>Fehler bei Skalierung</b><br> Bitte skalieren Sie das Bild manuell auf eine Breite von 298px und versuchen Sie es erneut.<br>"); 
    Das komische daran ist, dass nichtmal die() ausgegeben wird. Auch der Server lädt nicht erst noch ewig, er bricht dann einfach ab. Bei anderen Bildern wiederum gehts. Warum auch immer.

    Ich nehme mal an, dass es ein Größenproblem ist, ich habe deswegen den Memory manuell schon auf 128 gesetzt, hilft aber nichts.

    Das ganze ist ein Server bei 1und1.

    Danke für Hilfe,
    netti


  • #2
    Versuche es mal mit
    PHP-Code:
    error_reporting(E_ALL);
    ini_set('display_errors'1);
    echo 
    '<div>'.ini_get('memory_limit')."</div>\n";
    echo 
    '<pre>'var_dump(getimagesize($DatTemp)); "</pre>\n";
    $oldpic = @ImageCreateFromJPEG($DatTemp) or die("<b>Fehler bei Skalierung</b><br> Bitte skalieren Sie das Bild manuell auf eine Breite von 298px und versuchen Sie es erneut.<br>"); 

    Kommentar


    • #3
      Hallo,

      wenn du als Content-Type einen Grafik-Typ angegeben hast, ist es nur logisch, dass du die Meldung nicht siehst. Sie ist zwar da, wird aber nicht ausgegeben. Stattdessen siehst du nur ein Broken-Image-Icon. Um die Meldung zu sehen, musst du sie entweder woanders speichern oder den Content-Type zeitweilig auf ein Text-Format setzen.
      Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

      Kommentar


      • #4
        Vielen dank für eure nachrichten, sorichtig weitergeholfen hat mir das leider nur nicht:

        Code:
        40M
         array(7) {
          [0]=>
          int(2266)
          [1]=>
          int(1699)
          [2]=>
          int(2)
          [3]=>
          string(26) "width="2266" height="1699""
          ["bits"]=>
          int(8)
          ["channels"]=>
          int(3)
          ["mime"]=>
          string(10) "image/jpeg"
        }
        Heißt der memory liegt bei 40mb... also unter den 128. Ich kann den fehler nicht deuten =/

        Zitat von Manko10 Beitrag anzeigen
        Sie ist zwar da, wird aber nicht ausgegeben. Stattdessen siehst du nur ein Broken-Image-Icon. Um die Meldung zu sehen, musst du sie entweder woanders speichern oder den Content-Type zeitweilig auf ein Text-Format setzen.
        Das ist der Punkt. Da ist kein brokenimage icon. Da ist einfach NICHTS. Nicht mal was im quelltext. einfach abgebrochen, wie exit(). ich verstehs nicht.

        Kommentar


        • #5
          Also soweit passiert ja auch noch nicht viel, außer, dass du ein Bild aus einer JPEG-Grafik erstellt hast und dieses in den Speicher geladen wurde. Um diese auszugeben musst du noch

          imagepng($oldpic)

          ausführen (oder eben die entsprechenden Funktionen für andere Grafikformate).
          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

          Kommentar


          • #6
            Zitat von netti Beitrag anzeigen
            Heißt der memory liegt bei 40mb... also unter den 128. Ich kann den fehler nicht deuten =/
            Exakt. Vielleicht hast Du die falsche php.ini bearbeitet.
            PHP: get_cfg_var - Manual
            To check whether the system is using a configuration file, try retrieving the value of the cfg_file_path configuration setting.
            Genau so solltest Du prüfen, welche Datei Du ändern musst
            PHP-Code:
            <?php var_dump(get_cfg_var('cfg_file_path')); ?>
            2266*1699*5 Bytes ~ 18,5MB. Soviel Speicher brauchst Du, nur um das Bild mit gd im Speicher zu halten. Sollte es wirklich am Speicher liegen, macht Dein Skript noch irgendetwas anderes Speicher-aufwendiges.

            Kommentar


            • #7
              okay, also problem dabei ist, dass ich als kommerzieller nutzer von webangeboten bei 1un1 keinen Zugriff auf die php.ini habe. Aberes gibt ja auch andere Wege: Ich hab mal via

              PHP-Code:
              echo ini_get("memory_limit"); //Gibt 40M aus
              ini_set("memory_limit","128M");
              echo 
              ini_get("memory_limit"); //Gibt 128M aus 
              den speicher auf 128 gesetzt, dennoch bricht das script ohne erdenklichen Grund ab.
              memory_get_usage() habe ich eingebaut, meldet aber lächerliche 148792 bytes vor der stelle des abbruchs.

              Was ich nciht verstehe ist die berechnung der bIldgröße... wieso *5bytes? Sollte das Größe*Breite*Kanäle(also3)*farbbits(alsosein?

              manko: Ja naja, es ist jetzt nicht, so dass danach einfach kein Befehl mehr kommen würde... das script geht schon weiter:

              PHP-Code:
                 $oldpic ImageCreateFromJPEG($DatTemp) or die("<b>Fehler bei Skalierung</b><br> Bitte skalieren Sie das Bild manuell auf eine Breite von 298px und versuchen Sie es erneut.<br>");
                 
              $newpic ImageCreateTrueColor($imgwidth,$imgheight);
                 
              ImageCopyResampled($newpic,$oldpic,0,0,0,0,$imgwidth,$imgheight,$DatBild[0],$DatBild[1]); 
                 
              ImageJPEG($newpic,"$UplOrdTwo/$DatName_new"90) or die("<b>JPEG-Kopierfehler erster Ordnung</b><br><i>Beim Kopieren sind Fehler aufgetreten</i><br><br>Bitte melden Sie folgende Daten an einen Administrator <".$_incl['Admin']."> weiter: $DatName$DatTyp$DatBild[0]$DatBild[1]$UplOrdTwo$DatName_new");
                 
              ImageDestroy($oldpic) && ImageDestroy($newpic); 
              Nur passieren tut da nix mehr. Abbruch ohne Fehler.

              Kommentar


              • #8
                Zitat von netti Beitrag anzeigen
                Was ich nciht verstehe ist die berechnung der bIldgröße... wieso *5bytes? Sollte das Größe*Breite*Kanäle(also3)*farbbits(alsosein?
                Soweit ich weiss, hält GD das Bild immer als CMYK+alpha mit je einem Byte im Speicher, also 5 Byte per Pixel.

                Bricht es immer bei großen Bildern ab und nur bei bestimmten?
                Was passiert bei
                PHP-Code:
                <?php
                for($i=0$i<=3000$i+=200)
                {
                  echo 
                "<div>$i</div>\n"flush();
                  
                $im imagecreatetruecolor($i$i);
                  
                $b imagecolorallocate($im000);
                  
                imagefill($im00$b); 
                }
                echo 
                "<div>Done.</div>"flush();
                ?>
                ?

                Kommentar


                • #9
                  okay. Also soweit ich das beurteilen kann bricht es nur bei bestimmten bildern ab. Gestern habe ich eins hochgeladen mit 765kb, also mehr als oben. ... Ah aber moment, ich sehe gerad die pixelzahl war geringer: 1347*1796

                  Ich hab jetzt mal suprobiert und das Bild in 100er Schritten großskaliert. Dabei komme ich auf eine kritische Grenze von 1615px Breite und daraus resultierend 2154px höhe. Ab 1616px breite und 2155px höhe, bricht das script wieder ab. Skaliere ich auf 1615*2155px geht alles, bei 1615*2156 bricht er ab. Die kritische Grenze muss also irgendwo zwischen 3480325px. und 3481940px. liegen.

                  Das Script von david geht exakt bis 1600 und bricht dann kommentarlos ab.

                  Kommentar


                  • #10
                    Mal schauen, ob es wirklich am Speicher liegt
                    PHP-Code:
                    <?php
                    error_reporting
                    (E_ALL);
                    ini_set('display_errors'1);
                    function 
                    foo()
                    {
                      
                    $x memory_get_usage(true);
                      
                    printf('%.2f '$x/1048576);
                    }

                    echo 
                    PHP_VERSION " ";
                    foo();
                    $e str_repeat('a',1024);
                    $e str_repeat($e2048); // 2MB

                    foo();
                    $a str_repeat($e4);
                    for(
                    $i=0$i<80$i++)
                    {
                      if (
                    $i%8==0) echo "<br />\n";
                      
                    $a .= $e;
                      
                    foo();
                    }

                    Kommentar


                    • #11
                      Gibt aus:

                      Code:
                       4.4.8 0.02 2.02 <br />
                      12.02 14.02 16.02
                      Allerdings komm ich nciht mehr mit, was das script da macht ^^

                      Kommentar


                      • #12
                        Es belegt Speicher. Bei jedem Durchgang 2MB mehr. (Und beim Verknüpfen liegt die Zeichenkette zwei Mal im Speicher).
                        Jedenfalls wird das Skript bei zu großem Speicherverbrauch einfach abgeschossen. Die error_reporting und ini_set Zeilen hattest Du im Skript und es werden keine entsprechenden Meldungen ausgegeben?

                        Kommentar


                        • #13
                          jap, hatte ich, alles wie angegeben.

                          Kommentar


                          • #14
                            Und was gibt
                            PHP-Code:
                            <?php echo PHP_SAPI?>
                            aus?

                            Kommentar


                            • #15
                              Zitat von David Beitrag anzeigen
                              Und was gibt
                              PHP-Code:
                              <?php echo PHP_SAPI?>
                              aus?
                              Es sagt "cgi".

                              Kommentar

                              Lädt...
                              X