【发布时间】:2018-11-30 19:22:01
【问题描述】:
我想省略解析提到的函数的错误消息字符串来获得错误的确切含义。下面解释原因。
我创建了以下函数来检查图像是否为有效的 JPEG 或 PNG 并检查其完整性:
function validateImageByCreatingImageResource($filePath)
{
$validationResult = true;
$exif = exif_imagetype($filePath);
if ($exif === false) {
$validationResult = false;
}
if ($exif) {
$imageResource = false;
switch ($exif) {
case IMAGETYPE_JPEG:
case IMAGETYPE_JPEG2000:
$imageResource = @imagecreatefromjpeg($filePath);
break;
case IMAGETYPE_PNG:
$imageResource = @imagecreatefrompng($filePath);
break;
}
if ($imageResource !== false) {
imagedestroy($imageResource);
}
}
$error = error_get_last();
if (is_array($error)) {
error_clear_last();
$validationResult = false;
}
return $validationResult;
}
现在,我可以检测到错误,但问题在于它们的处理方式。例如,这里有 2 个类型为 E_NOTICE 的错误:
- 原因:文件结尾无效(EOI 标记错误)
imagecreatefromjpeg(): gd-jpeg, libjpeg: 可恢复错误: Premature JPEG文件结束
- 原因:EOI 标记后的附加数据(由制作图片的设备插入)
imagecreatefromjpeg(): gd-jpeg, libjpeg: 可恢复错误:无效 顺序 JPEG 的 SOS 参数
我的问题:我当然可以解析错误消息字符串,但是有没有更好的方法来单独处理这些错误?
另外,我没有找到任何其他解决方案(通过使用 php 工具)如何验证图像完整性。
====================================编辑=========== ==========================
澄清更多:我需要确定图像到底有什么问题,因为我需要处理图像部分上传到服务器的情况,并允许图像有效,但在 End Of 文件末尾有附加信息图像标记。
array getimagesize ( string $filename [, array &$imageinfo ] )
为数组提供此信息:
[
0 => integer width
1 => integer height
2 => integer type
3 => string 'width="<width>" height="<height>"'
bits => from what i understand it is color bits
channels => integer number of channels
mime => mime type eg. 'image/jpeg'
]
仅当图像元数据无效时才会发出警告。没有关于来自imagecreatefromjpeg() 的 E_WARNING 等正确 SOS 标记的信息
【问题讨论】:
标签: php validation png jpeg