iptcembed()破坏了JPG数据

问题描述 投票:0回答:1

[似乎PHP的iptcembed()函数破坏了JPG文件。该演示提取了IPTC数据,并立即再次将其嵌入:

iptcembed()

警告:getimagesize():损坏的JPEG数据:XX行上example.php中的标记之前的1382个无关字节

怎么了?

php jpeg php-7.3 getimagesize iptc
1个回答
0
投票

// extract IPTC data getimagesize($sourceFile,$info); $iptcData = $info['APP13']; // embed IPTC data $newFile = iptcembed($iptcData,$sourceFile); // write new file to disk $fp = fopen($sourceFile,"w"); fwrite($fp,newFile); fclose($fp); // get size of file $size = getimagesize($sourceFile,$info); 已于2019年1月30日报道:

在php 7.3分支上,有时流无效

这会影响PHP版本7.3.0、7.3.1和7.3.2。发出了PHP bug #77546,并且错误是PHP 7.3.3中的patch

[[2019-02-08 09:40 UTC] [email protected]此更改将成为PHP 7.3.3的一部分。

我已验证该错误在PHP 7.2或7.4中不存在。


还提供了一个临时解决方案:

[[2019-02-08 05:06 UTC]在gmail.com的imagevuex临时解决方案,在写入文件之前使用getimagesizefromstring()检查图像流是否有效:

fixed

另请参见$content = iptcembed($iptc, $file,0); if($content && @getimagesizefromstring($content)) // is valid ,它提供了这种检测图像损坏的方法:

PHP 7.3 Critical Bug Warning
© www.soinside.com 2019 - 2024. All rights reserved.