Fel*_*Eve 33
exif_imagetype是一个更好的解决方案.
这种方法比使用getimagesize更快.引用php.net "返回值与getimagesize()在索引2中返回的值相同,但exif_imagetype()要快得多."
if(exif_imagetype('path/to/image.jpg')) {
// your image is valid
}
Run Code Online (Sandbox Code Playgroud)
更新:
在阅读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
Run Code Online (Sandbox Code Playgroud)
我意识到这并不详尽,但至少表明,对于常见的文件类型,结果是预期的.
根据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 :(';
}
Run Code Online (Sandbox Code Playgroud)
我猜getimagesize:
list($width, $height, $type, $attr) = getimagesize("path/to/image.jpg");
if (isset($type) && in_array($type, array(
IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF))) {
...
}
Run Code Online (Sandbox Code Playgroud)