我正在开发一个需要上传文件的项目。我想确保它是安全的,并且只上传PDF文件。我已经在检查文件扩展名,但我想确保该文件确实是一个pdf文件。
在php中检查mime类型的最佳方法是什么?我使用的是PHP 5.2.5,似乎无法使fileinfo或mime_content_type()正常工作。
对于fileinfo我一直得到这个:
Warning: finfo_open() [function.finfo-open]: Failed to load magic database
at '(null)'. in [snipped filename] on line 35
答案 0 :(得分:5)
mime类型对于检查文件类型不可靠。客户端的浏览器可能会错误地报告。
检查Magic Number。 PDF文件以“%PDF”(25 50 44 46)开头。
答案 1 :(得分:1)
实际上,MIME类型并不是确保用户上传有效文件的最佳方式,因为如果您知道如何,这可能很容易被伪造。
但是当发布文件时,你总是可以这样检查mime类型:
$Type = $_FILES['someFile']['type'];
也许您可以使用php类来确定它是有效的PDF类似FPDF(http://www.fpdf.org/)
好吧,祝你好运:)
答案 2 :(得分:1)
这可能意味着未设置MAGIC环境变量,并且您的魔术文件不在/ usr / share / misc / magic。将MAGIC的值设置为指向正确的魔术文件,或将魔术文件作为第二个参数传递给finfo构造函数
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");
或
$finfo = finfo_open(FILEINFO_MIME, "/usr/share/misc/magic");
答案 3 :(得分:-2)
获取MIME类型的简单方法是直接来自$ _FILES。 如果mime类型包含单词'pdf',那么您可以将其视为有效的PDF。
$contentType = $_FILES['myFile']['type'];
if(isValidPDF($contentType)) {
die('It is a PDF');
} else {
die('It is not a PDF');
}
function isValidPDF($mime) {
return strpos($mime, 'pdf') !== false;
}