我希望人们能够将zip文件上传到我的服务器。我有一个表单供他们上传,然后重定向到上传页面。我可以成功上传图片(png和jpg),但每当我尝试拉链时,我会在第4-8行得到几个“未定义的索引错误”。这是我的代码。如果你想查看网站,它应该在gregsminecraft.dyndns.org:25566/file.php编辑时可用:我相信它不接受大型zip文件,因为我尝试使用较小的zip文件并且它有效。有没有办法接受更大的zip文件?
if ((($_FILES["file"]["type"] == "application/zip")
|| ($_FILES["file"]["type"] == "application/x-zip-compressed")
|| ($_FILES["file"]["type"] == "multipart/x-zip")
|| ($_FILES["file"]["type"] == "application/x-compressed")
|| ($_FILES["file"]["type"] == "application/octet-stream"))
&& ($_FILES["file"]["size"] < 20971520))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
答案 0 :(得分:3)
您说您的上传表单在上传后会重定向吗?请记住,除非您已采取措施保留文件,否则PHP会在脚本退出时删除所有上载的文件。如果您的表单POST(比如)“upload.php”然后重定向到“handle_upload.php”,您必须在“upload.php”脚本中实际处理上传,否则文件就会消失。
同样,不要相信$ _FILES数组中的['type']
和['name']
参数。这是用户提供的数据,很容易被破坏。您还使用用户提供的文件名将文件存储在服务器上。没有任何说明用户无法破解上传表格,并使用mime类型的“application.zip”调用他们的文件“../../../../etc/passwd”。您的脚本会很乐意接受并覆盖服务器的密码文件。
通过错误检查处理上传的正确方法是:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_FILES['file'])) {
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
... file was succesfully uploaded, process it
} else {
... file upload failed, output error message, etc...
} else {
... no upload at all, not even an attempt
}
} else {
.... not in a POSt environment, so can't possibly have a file upload ...
}