Несмотря на то, что это старая тема, она пришла мне из ниоткуда с новым php 7.2: Ошибка # 75785 Много ошибок из exif_read_data
Я согласен с @maraspin, как любая ошибкапо какой-то причине, а не иметь с ней дело - значит иметь низкую производительность (время, возможности).
МОЯ ЦЕЛЬ : получить 'DateTimeOriginal' загружаемого изображения (а не только creation_date файла tmp)- DateTime).
1.Обычное использование exif_read_data:
$exif = exif_read_data(tmp/phpTBAlvX); or
$exif = exif_read_data($file->tempName, 'ANY_TAG'); or
$exif = exif_read_data($file->tempName, 'IFD0'); or
$exif = exif_read_data($file->tempName, 'EXIF');
Предупреждение PHP - yii \ base \ ErrorException exif_read_data (tmp / phpTBAlvX): тег процесса (x010D = DocumentNam): недопустимые компоненты (0)
2.Использование оператора @ для скрытия предупреждения:
$exif = @exif_read_data(tmp/phpTBAlvX);
РЕЗУЛЬТАТ: $ exif в виде массива с 20 аргументами, но без 'DateTimeOriginal' в нем
Array (
[FileName] => phphT9mZy
[FileDateTime] => 1529171254
...
[SectionsFound] => ANY_TAG, IFD0, EXIF
[COMPUTED] => Array
(
[html] => width="3968" height="2976"
[Height] => 2976
[Width] => 3968
...
)
[ImageWidth] => 3968
[ImageLength] => 2976
[BitsPerSample] => Array()
[ImageDescription] => cof
[Make] => HUAWEI
...
[DateTime] => 2018:06:14 12:00:38
[YCbCrPositioning] => 1
)
3.Завершено решением:
$img = new \Imagick(tmp/phpTBAlvX);
$allProp = $img->getImageProperties();
$exifProp = $img->getImageProperties("exif:*");
РЕЗУЛЬТАТ: $ allProp в виде массива с 70 аргументами с DateTimeOriginal
Array (
[date:create] => 2018-06-16T21:15:24+03:00
[date:modify] => 2018-06-16T21:15:24+03:00
[exif:ApertureValue] => 227/100
[exif:BitsPerSample] => 8, 8, 8
...
[exif:DateTimeOriginal] => 2018:06:14 12:00:38
[jpeg:colorspace] => 2
[jpeg:sampling-factor] => 2x2,1x1,1x1
)
РЕЗУЛЬТАТ: $exifProp как массив с 66 аргументами с DateTimeOriginal
Array (
[exif:ApertureValue] => 227/100
[exif:BitsPerSample] => 8, 8, 8
...
[exif:DateTimeOriginal] => 2018:06:14 12:00:38
)
МОЕ РЕШЕНИЕ:
- никогда не используйте @ для подавления любого предупреждения или кода
- используйте класс Imagick для получения любого тега изображения