我正在尝试使用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文件。
此外,我愿意强制下载文件而不是在浏览器中显示它们,但是,首选是在浏览器中显示。
答案 0 :(得分:0)
getimagesize()
函数返回所需信息。 PHP manual中介绍了如何获取此信息。 image_type_to_mime_type()
功能也很有帮助。 Examples也在在线手册中提供。