如何使用php上传zip文件?

问题描述:

我希望人们能够将zip文件上传到我的服务器。我有一个表格供他们上传,并重定向到上传页面。我可以成功上传图片(PNG和JPG格式),但每当我尝试一个zip文件时,我会在第4-8行上看到几个“未定义的索引错误”。这是我的代码。如果你想看看这个网站,应该可以在gregsminecraft.dyndns.org:25566/file.php编辑:我相信它不接受大的zip文件,因为我用较小的文件尝试了它,它工作。有没有办法接受更大的zip文件?如何使用php上传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

我只是测试您所提供的网址,并得到了以下的输出: 上传:iPhone intro.zip 类型:application/X-ZIP压缩 尺寸:158.626953125 KB 临时文件:/私营/ var/tmp中/ php0ZyEoi 在存储:上传/ iPhone intro.zip – 2011-04-22 17:47:27

你说上传后上传表单重定向?请记住,当脚本退出时,PHP会删除所有上载的文件,除非您已采取措施保存该文件。如果你的表单发布到(比如说)“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 ... 
}