2016-05-20 7 views
10

Ich arbeite an einer Anwendung, wo ich die Ausrichtung von JPEG-Dateien, die aus einem AWS-Bucket heruntergeladen wurden, fixiere (falls vorhanden).PHP exif_read_data Illegale IFD-Größe

Here können Sie überprüfen, dass dieses Bild exif Rotation Abschnitt hat.

lade ich das Bild mit

file_put_contents('/local/path/to/file', file_get_contents('/path/to/url/image')); 

Und nachdem ich versuche Orientierung durch die Gregwar Image library zu beheben.

Image::open($path)->fixOrientation()->save($dest, $type, $quality); 

Ich habe versucht, mit mehreren Bildern und ich erhalte immer die Meldung

Warning: exif_read_data('/local/path/to/file'): Illegal IFD size 

Ich dachte, dass ein Problem im Zusammenhang mit, wie ich die Bilder abzurufen, aber ich habe auch versucht, mit curl und fopen mit demselben Ergebnis.

Jemand hat einige Ratschläge?

Antwort

0

Sie können ein „@“ verwenden, bevor Warnungen zu ignorieren: @Image::open($path)->fixOrientation()->save($dest, $type, $quality);

, dass eine Menge Leute über diese über das Internet beschwert ist. Wahrscheinlich einige Exif-Daten mit Fehler. Wenn der Vorgang so funktioniert, wie Sie möchten, dokumentieren Sie ihn und fahren Sie fort.

+4

Hallo, vielen Dank für den Rat, aber mein Problem ist nicht die Warnung (dass die Bibliothek wickeln), aber warum ich exif Daten nicht überprüfen kann. Zu diesem Zeitpunkt kann ich die Ausrichtung eines Bildes nicht festlegen, was frustrierend ist. – stuzzo

+0

Versuchen Sie es mit: '-> useFallback (false)': https://github.com/Gregwar/Image/issues/96 –

+0

@stuzzo: Haben Sie eine Problemumgehung gefunden? – auco

0

Ich habe dieses Problem auch mit exif_get_data aufgetreten. Ich kann Bilder auf meinem localhost (PHP v5.4.15), aber auf meinem Webhost (PHP v5.6.22) mit dem Fehler 'illegal IFD size' umgehen, obwohl ich die Warnmethode "@" ignore versucht habe. Ich habe festgestellt, dass exif_get_data auf dem Webhost (ob aufgrund unterschiedlicher Version oder Installation) tatsächlich eine Ausnahme ausgelöst hat, anstatt eine Warnung auszugeben. Ich bin die EXIF-Daten mit dem Bild neu zu orientieren, wenn es gewesen ist gedreht, so dass, wenn die EXIF-Daten fehlerhaft oder nicht vorhanden Ich ignoriere es einfach und nichts tun, hier ist der Code-Schnipsel:

 try { 
     $exif = exif_read_data($filePath); 
    } 
    catch (Exception $exp) { 
     $exif = false; 
    } 
    if ($exif){ 
     ... 
    } 
+5

PHP-Standardfunktion keine Ausnahmen auslösen. –

2

PHP 5.6.2x hat einen Fehler mit seiner EXIF-Fähigkeit (siehe Bug #72914 sowie #72819 für weitere Informationen). Der Versuch, EXIF-Daten zu lesen, führt zu einem der beschriebenen Fehler (ungültige IFD-Größe, fehlerhafte IFD-Daten, andere).

Derzeit (2016-11-21) gibt es keine Fix für die 5.6-Filiale. In Zweig 7 werden einige Tests ausgeführt.

Implementieren Sie einen lokalen Fix, indem Sie auf die IFD-Fehler verursachende Funktion testen, und nehmen Sie bei der Bestätigung an, dass EXIF ​​für die Dauer des Skripts nicht verfügbar ist.

(Sie können das in den Lader Patch, wenn Sie möchten, und ‚Überlast‘, die Funktionen standardmäßig false/0/null zurück, anstatt Bruch, um anzuzeigen)

+2

Ich bekomme das auch in PHP 7.0.21. – burzum

-1

Sie einen Fehler mit set_error_handler

fangen
set_error_handler(function() { 
    throw new Exception(); 
}, E_WARNING); 

    try{ 
    $exifData = exif_read_data($filePath); 
    } catch (Exception $e) { 
    $exifData = false; 
    } finally { 
    restore_error_handler(); 
    } 

    if(!$exifData) { 
    // do something 
    } 
Verwandte Themen