PHP imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error
Ich versuche, laden Sie ein Bild von einer externen Website, über die ich keine Kontrolle haben.
Meisten der Zeit, es funktioniert gut (Hunderte Bilder, die bisher getestet).
Ist es nun mir dieser Fehler für ein bestimmtes Bild:
imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: premature end of data-segment
dieser Linie:
$im = @imagecreatefromstring( $imageString );
Den Rat, den ich gelesen hatte, so weit nahe Zugabe:
ini_set("gd.jpeg_ignore_warning", true);
aber das hatte keine Wirkung und ich bin noch immer der Fehler. Ich mache das mit ini_set einfach vor dem Aufruf. Ist das relevant?
Ich bin wirklich stecken wie, um diesen Fehler ignorieren und weitermachen.
- Sie haben die Erlaubnis zum einstellen dieser ini-parameter? Und ist diese Warnung verursacht dein script zu beenden?
- BTW, sind Sie nur wollen, um dieses Bild, oder sind Sie eigentlich zu wollen, kopieren Sie es auf Ihrem server?
- Ich bekomme keine Warnungen über die INI-Datei-Einstellung, es ist immer noch ein schwerwiegender Fehler auf der gdcreate Funktion.
- Muss ich das image laden, um eine Miniaturansicht und speichern Sie es lokal.
- Dann schlage ich vor, kopieren es auf den server zuerst, und dann mit der
imagecreatefromjpeg()
,imagecreatefromgif()
oderimagecreatefrompng()
Funktionen auf die Datei, die Sie kopiert, ist es verpflichtet, weniger fehleranfällig. - Aber das Bild, mime-Typ ist jpeg. Es scheint sich um ein jpeg, also es versucht zu laden, es als jpeg. Es gibt etwas falsch mit dem Bild, das ich bin versucht zu laden, aber ich brauche, um zu verarbeiten, dass anmutig.
- Auch haben Sie versucht
ini_set("display_errors", "off");
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem lag an meiner Fehlerbehandlung. Ich würde einrichten eines Fehler-handlers, so dass mein Aufruf
nicht unterdrücken Fehler.
Indem geändert wird, mein Fehler-handler mit:
Kann ich nun korrekt unterdrücken ausgewählte Fehler.
Fand ich die info hier: http://anvilstudios.co.za/blog/php/how-to-ignore-errors-in-a-custom-php-error-handler/
dies kann gelöst werden mit:
Wenn Sie zeigen nur das Bild, dann schlage ich vor, einfach den Inhalt zu Lesen und zeigt das Bild wie folgt:
Wenn Sie wollen, kopieren Sie das Bild auf Ihrem server, Sie haben ein paar Optionen, von denen zwei die
copy()
- Funktion oder die Methode oben verwendet und dannfwrite()
:Option 1 - Die
copy()
- Funktion, verfügbar ab PHP 4Option 2 - Mit
file_get_contents()
undfwrite()
Ich hoffe, Sie finden einige den Einsatz in den oben genannten
file_get_contents()
Methode zusammen mitfwrite()
, die Sie benötigen, um Ihre eigenen Erweiterungen zu prüfen, die auf die remote-Datei. Wenn Sie diefile_get_contents()
zu ZEIGEN nur das Bild benötigen Sie zum überprüfen das Bild, Erweiterungen und anwenden der relativen content-type header.Wenn man bedenkt, dass Sie wollen, um eine Miniaturansicht und speichern Sie es, könnten Sie implementieren eine handliche Größe ändern-Funktion wie folgt:
Dann, nachdem Sie die Datei kopiert haben, um Ihren server mit einer meiner Methoden, die in meiner Antwort oben, können Sie einfach die Funktion wie folgt:
Diese Funktion dient mir ziemlich gut. Ich es zu 1000 Bilder am Tag und es funktioniert wie ein Charme.