0

我正在尝试使用 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文件,主要office文件、doc、docs、xls、xlx等和txt文件。

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

4

1 回答 1

0

所需信息由getimagesize()函数返回。PHP 手册中解释了如何获取这些信息。该image_type_to_mime_type()功能也很有帮助。在线手册中也提供了示例。

于 2012-12-30T15:27:42.383 回答