我想让我的用户可以自由地在我的在线存储网站上传所有类型的文件。我只知道如何上传如下图像文件:
//other code
$_FILES["file"]["type"] == "image/jpeg"
$_FILES["file"]["type"] == "image/jpg"
$_FILES["file"]["type"] == "image/pjpeg"
$_FILES["file"]["type"] == "image/x-png"
$_FILES["file"]["type"] == "image/png"
//other code
使用ebove代码,我可以将给定的扩展文件上传到我的网站。但我想上传.mp3 .doc .ppt .docx。 pptx .sql和更多可能的文件。要做到这一点,我应该在下面的“问号”中加入什么:
$_FILES["file"]["type"] == ? // for mp3
$_FILES["file"]["type"] == ? // for doc/docx
$_FILES["file"]["type"] == ? // for ppt/pptx
$_FILES["file"]["type"] == ? // for sql
$_FILES["file"]["type"] == ? // for zip/tar/rar
请告诉我是否有任何文件扩展名列表以及我应该写什么来上传问题文件?
---感谢。
答案 0 :(得分:2)
mp3 => ($_FILES["file"]["type"] == "audio/mp3")
pdf => ($_FILES["file"]["type"] == "application/pdf")
zip => ($_FILES["file"]["type"] == "application/zip")
|| ($_FILES["file"]["type"] == "application/x-zip-compressed")
|| ($_FILES["file"]["type"] == "multipart/x-zip")
|| ($_FILES["file"]["type"] == "application/x-compressed") // one of those depending on the zip file.
sql=> ($_FILES["file"]["type"] == "application/octet-stream")
ppt=> ($_FILES["file"]["type"] == "application/vnd.ms-powerpoint")
pptx=> ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.presentationml.presentation")
docx=> ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
你需要对它们进行一些搜索,以确认这些正是你正在寻找的。我相信它无处不在。
答案 1 :(得分:1)
$_FILE['file']['type']
中提供的MIME类型是客户端提供的信息,可能是伪造的。不要相信它。它也可能因机器而异,因为您看到每个扩展都没有单一的MIME描述,因此依靠它来做出任何决定都会非常令人沮丧。
有人可以向您发送一个music.php
并说出audio/mp3
,将其保存在您的网站文件夹中,您刚刚给他们提供了危及整个服务器的方法。不要这样做。
而是使用文件扩展名来确定它的类型。您还可以列出阵列中所有允许的扩展名,并检查此阵列中是否存在文件扩展名。
$allowed_extensions = array(
'mp3', 'mp4', 'doc', 'zip', 'rar',
'docx', 'ppt', 'pps', 'pptx' // ...
);
if (!in_array(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION), $allowed_extensions))
die("You can't upload this.");
或者,你可以禁止危险的文件扩展名并允许其他所有内容,考虑到你想要允许“任何类型的文件”,这会更容易做到。
$disallowed_extensions = array('exe', 'scr', 'cpl', 'bat', 'php', 'htaccess');
if (in_array(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION), $disallowed_extensions))
die("You can't upload this.");
也要小心文件名。 $_FILES['file']['name']
中提供的文件名应该只是文件基名,但是这些信息再次由用户提供,并且可以包括完整路径或相对路径,以使脚本将其保存在不应该的位置。始终使用basename($_FILES['file']['name'])
确保在保存文件时使用文件基名。