使用php5.2在浏览器中安全显示上传文件的最佳方法是什么?


What is the best way to safely display uploaded files in browser with PHP 5.2

我正在尝试用PHP服务用户上传的文件。

虽然直接指向文件很容易,但似乎大家一致认为不应该直接指向站点上的目录,因为这会产生安全风险…如果有人可以让恶意文件通过屏障进入网站,那么如果他们知道它在服务器上的位置,他们就可以轻而易举地执行它。相反,建议将文件放在站点树结构之外的文件夹中,将名称作为原始名称以外的内容存储在数据库中,并将文件路径存储到隐藏目录,并使用读取和显示的PHP文件提供该文件。我可以使用

完成所有这些并显示乱码:
// get mime type somehow//
header("Content-type:".$mimetype);
readfile($totalfilepath);

问题是如何获得正确的mime类型,使它显示一个漂亮的文件,而不是乱码。

如果你的版本是5.3,你可以这样使用finfo:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
header("Content-Type: ".finfo_file($finfo, 'files/'.$file));
finfo_close($finfo);
readfile('files/'.$file);  
不幸的是,finfo在5.2中不起作用,还有一个函数叫做
mime_content_type
然而,

从4开始被弃用。Xx,无论如何都不在我的服务器上。从我所读到的,似乎没有一个可靠的方法来获得5.3之前的mime类型。我不想升级到5.3,因为它需要升级一个非常大的网站。

注意:允许上传的文件包括。jpg、。gif、。png、。pdf文件、主要办公文件、doc、docs、xls、xlx等文件和txt文件。

另外,我愿意强制下载文件,而不是在浏览器中显示它们,然而,首选是在浏览器中显示。

所需信息由getimagesize()函数返回。PHP手册中解释了如何获取这些信息。image_type_to_mime_type()函数也很有用。联机手册中也提供了示例。