如果您想确保图像是真实图像,您可以使用 gd http://www.php.net/gd 加载
如果 gd 资源创建正确则图像是真实图像
首先使用以下方法检测 mime:
getimagesize($filename);
那么,例如,如果它是一个 jpeg 加载到 gd 中:
$gdresource = imagecreatefromjpeg($filename);
如果$gdresource 有效/创建时没有警告,则图像有效且未损坏...getimagesize()(可能)不足以检测损坏的图像
另外,另一个重要说明...不要依赖$_FILES['blabla']['name'],因为它可能包含无效的 utf-8 序列(例如,假设您使用的是 utf-8)并且它可能是一种潜在的攻击机制,作为任何用户输入
因此您还需要对其进行验证/清理
$originalFileName = $_FILES['blabla']['name'];
$safeOriginalFileName = iconv('UTF-8', 'UTF-8//IGNORE', $originalFileName);
// more additional checks here. for example filename is empty ""
move_uploaded_file(...., $safeOriginalFileName);
另外,请记住$_FILES['blabla']['name'] 包含文件扩展名,这可能不正确。因此您需要将其剥离并使用实际正确的扩展名(您之前使用 getimagesize() + imagecreatefrom*() 解决的扩展名)
$safeOriginalFileName = basename( $safeOriginalFileName ); // removes the extension
$safeOriginalFileName = $safeOriginalFileName . ".jpg"; // correct extension
希望这会有所帮助:)
也正如 DaveRandom 指出的那样,不要也依赖 $_FILES['blabla']['type'],而是按照我的建议使用 getimagesize() + imagecreatefrom*()