[似乎PHP的iptcembed()
函数破坏了JPG文件。该演示提取了IPTC数据,并立即再次将其嵌入:
iptcembed()
警告:getimagesize():损坏的JPEG数据:XX行上example.php中的标记之前的1382个无关字节
怎么了?
// 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