我正在创建文件上传脚本,并且正在寻找验证上传文件的最佳技术和实践。
允许的扩展名是:
$allowed_extensions = array('gif','jpg','png','swf','doc','docx','pdf','zip','rar','rtf','psd');
这是我正在做的事情的清单。
检查文件扩展名
$path_info = pathinfo($filename); if( !in_array($path_info['extension'], $allowed_extensions) ) { die('File #'.$i.': Incorrent file extension.'); }
检查文件 mime 类型
$allowed_mimes = array('image/jpeg','image/png','image/gif','text/richtext','multipart/x-zip','application/x-shockwave-flash','application/msword','application/pdf','application/x-rar-compressed','image/vnd.adobe.photoshop'); if( !in_array(finfo_file($finfo, $file), $allowed_mimes) ) { die('File #'.$i.': Incorrent mime type.'); }
检查文件大小。
我应该怎么做才能确保上传的文件是有效文件?我注意到奇怪的事情。我将 .jpg 文件扩展名更改为 .zip 并且...它已上传。我认为它的 MIME 类型不正确,但之后我注意到我没有检查特定类型,而是检查数组中是否存在特定的 MIME 类型。我稍后会修复它,这对我来说没有问题(当然,如果你有任何好的解决方案/想法,请不要犹豫分享它)。
我知道如何处理图像(尝试调整大小、旋转、裁剪等),但不知道如何验证其他扩展。
现在是我提问的时候了。
- 您知道验证此类文件的好方法吗?也许我应该为 .zip/.rar 文件解压缩档案,但是文档(doc、pdf)呢?
- 旋转、调整大小是否适用于 .psd 文件?
- 基本上我认为 .psd 文件具有以下 mime: application/octet-stream 但是当
我尝试上传它显示给我的 .psd 文件 (image/vnd.adobe.photoshop)。我对此有点困惑。文件是否总是具有相同的 MIME 类型?
另外,我不能强制代码块工作。有人猜到为什么吗?