Ankündigung

Einklappen
Keine Ankündigung bisher.

imagejpeg: zerstückelte und verfärbte Bilder

Einklappen

Neue Werbung 2019

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

  • imagejpeg: zerstückelte und verfärbte Bilder

    Hallo,

    habe folgendes Problem. Ich verwende ein Script um JPG Bilder die auf meinem Server liegen auszugeben. Das hat bis vor kurzem auch funktioniert. Nun geht es auf einmal nichtmehr, die Bilder werden nur in Bruchstücken angezeigt und die Farben verbogen (siehe Anhang)



    PHP-Code:
    <?


    $src=strip_tags($_GET["src"]);

    if (file_exists(".$src"))
    {
            header ("Content-type: image/jpeg");

            $im1 = imagecreatefromjpeg(".$src");

            imagejpeg($im1, "", 100);
            imagedestroy($im1);
    }        
            
    ?>

    echo ini_get("memory_limit"); liefert 8M
    echo ini_get( 'max_execution_time' ); liefert 30


    Es handelt sich um Bilder mit max 1000px Seitenlänge und 667 Px Höhe, also sollten die 8M die 1und1 eingestellt hat eigentlich ausreichen.

    Hat jemand eine Idee warum es plötzlich nichtmehr geht?
    Angehängte Dateien

  • #2
    Die Bilder liegen schon als JPEG-Bilder auf dem Server? Dann reicht auch das Setzen eines entsprechenden Headers plus readfile(). Spart eine Menge Overhead.

    Wozu strip_tags?

    Kommentar


    • #3
      Zitat von mermshaus Beitrag anzeigen
      Die Bilder liegen schon als JPEG-Bilder auf dem Server?
      In dem Fall ja. Ich hab aber auch noch ein anderes Skript, mit dem ich ein Wasserzeichen über Fotos lege. Das funktioniert auch nichtmehr.

      Zitat von mermshaus Beitrag anzeigen
      Wozu strip_tags?
      Weil ich den Pfad zur Datei als Parameter in der URI übergebe und kein php Code eingeschleust werden soll.

      Kommentar


      • #4
        Statt wild drauf los filtern bitte erst Hirn einschalten.

        Kommentar


        • #5
          Was das konkrete Fehlerverhalten angeht: Funktioniert es denn mit kleineren Bildern einwandfrei?

          Falls nein, würde das ja eher für ein Problem mit der Grafikbibliothek oder der Programmierung sprechen.

          Du könntest auch mal versuchen, eines der kaputten Bilder runterzuladen und in einem Hexeditor zu schauen, ob am Dateiende vielleicht eine Fehlermeldung steht. Halte ich nicht für wahrscheinlich, aber man weiß ja nie.

          Kommentar


          • #6
            Mit kleinen Bildern geht es. In der HEX Ansicht nichts auffälliges.
            Hab schon versucht das Memory Limit hoch zu setzen, aber das ändert nichts.

            Edit: Mit kleinen Bildern funktioniert es auch nicht immer. Wenn ich das Skript für dasselbe Bild mehrmals aufrufe, geht es manchmal, manchmal nicht. Und das Ergebnis sieht immer anders aus.

            Kommentar


            • #7
              Das müsste auch eigentlich zu einer PHP-Fehlermeldung führen statt zu einer halben Ausgabe.

              Auf Verdacht: Logs durchgucken? Error-Reporting aktivieren?

              PHP-Code:
              error_reporting(-1);
              ini_set('display_errors'1); 
              Es gibt die Möglichkeit, auf Systemebene Prozessen eine bestimmte Menge CPU-Zeit (das ist nicht vergleichbar zu Echtzeit) zuzugestehen und sie danach automatisch durch den Kernel beenden zu lassen.

              Da das Bearbeiten von Bildern rechenintensiver ist als etwa Zugriffe auf die Festplatte, könntest du in der Beziehung in ein Limit laufen.

              So was weiß im Zweifel (hoffentlich ) der Support oder es steht irgendwo im Hilfecenter.

              Vielleicht wurdest du automatisch gedrosselt, weil du viel Rechenleistung verbrauchst? Ein 8M-Memory-Limit klingt ja nicht gerade nach dem „ressourcenfreundlichsten“ Space. *schulterzuck*

              So als Tipp: Cache vielleicht die mit Wasserzeichen versehenen Bilder, statt sie immer wieder neu zu berechnen.

              Kommentar


              • #8
                Naja die max_execution_time steht auf 30, aber das Skript lief in deutlich unter 1s durch. Hab auch schon die max_execution_time auf 0 gesetzt (sofern der Server das zugelassen hat, das weiss ich nicht..).

                Naja bin ab morgen eh unterwegs, wenn es nächste Woche immernoch so sein sollte frage ich mal beim 1und1 Support nach, in der Hoffnung dieses mal einen Mitarbeiter zu erwischen der weiss wovon er redet....

                Kommentar


                • #9
                  Ich habe heute morgen zufällig aus einem anderem Grund mal <?php while(true); auf einem (schwachen) 1&1-Webspace laufen lassen. Das riegelt auch sehr schnell ab (in wenigen Sekunden). Maximum execution time scheint dagegen dort sehr generös eingestellt zu sein (50000 Sekunden). Weiß nicht, ob sich daraus was ableiten lässt.

                  Es gäbe auch noch eine Timeout-Ebene in der Server-Software selbst (und wer weiß wo noch). Die steht bei Apache glaube ich standardmäßig bei 300 Sekunden. Lässt sich aber natürlich umstellen.

                  Aber auf die Konfigurationseinstellungen hast du als normaler Kunde wohl nicht mal Lesezugriff. Alles nicht ganz leicht herauszufinden.

                  Kommentar

                  Lädt...
                  X