在处理上传文件时,$_FILES['foo']['type']
并不总是可靠的。我发现,如果在OS X上更改扩展名,'type'会自动更改。
相反地,可以考虑:
$fileInfo = new \finfo(FILEINFO_MIME);
$mimeType = $fileInfo->buffer(file_get_contents($_FILES['foo']['tmp_name']));
$mimeType = explode(';', $mimeType);
现在,如果我将一个PHP脚本重命名为.jpg并上传它(在OS X 10.10上)$_FILES['foo']['type']
=image/jpeg
和$mimeType
=text/x-php
。
文件类型可以很容易地更改,但是如何欺骗PHP的finfo::buffer呢?$_FILES['foo']['type']
和finfo(FILEINFO_MIME)
之间有什么区别?