检查图像在PHP中是否有效的最佳和最快的方法是什么?

2022-08-30 14:50:41

检查图像在PHP中是否有效的最佳和最快的方法是什么?我需要它能够检查GIF,JPG以及PNG图像。


答案 1

exif_imagetype是更好的解决方案。

此方法比使用 getimagesize 更快。引用 php.net“返回值与getimagesize()在索引2中返回的值相同,但exif_imagetype()要快得多。

if(exif_imagetype('path/to/image.jpg')) {
    // your image is valid
}

更新:

在阅读getimagesize可能不可靠之后,我试图找到有关哪些文件类型可以给出误报的更多信息,但找不到更多信息,因此进行了简短的测试(使用):exif_imagetype

PowerPoint-survey-results.pptx - N
LRMonoPhase4.wav               - N
TestWordDoc.doc                - N
drop.avi                       - N
test.dll                       - N
raw_data_sample.sav            - N
text.txt                       - N
Excel-survey-results.xlsx      - N
pdf-test.pdf                   - N
simplepie-1.5.zip              - N
Word-survey-results.docx       - N
centaur_1.mpg                  - N
Test.svg                       - N
multipage_tif_example.tif      - Y
200.gif                        - Y
Test.png                       - Y
test.jpg                       - Y

我意识到这不是详尽无遗的,但至少表明对于常见的文件类型,结果是预期的。


答案 2

根据 PHP 文档的建议:

“不要使用 getimagesize() 来检查给定文件是否是有效的图像。请改用专门构建的解决方案,例如 Fileinfo 扩展。

下面是一个示例:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, "test.jpg");

if (isset($type) && in_array($type, array("image/png", "image/jpeg", "image/gif"))) {
    echo 'This is an image file';
} else {
    echo 'Not an image :(';
}

推荐