【问题标题】:How can I upload a zip file using php?如何使用 php 上传 zip 文件?
【发布时间】:2011-04-22 17:38:53
【问题描述】:

我希望人们能够将 zip 文件上传到我的服务器。我有一个表格供他们上传,它会重定向到上传页面。我可以成功上传图片(png 和 jpg),但是每当我尝试使用 zip 压缩包时,我都会收到几个“第 4-8 行未定义的索引错误”。这是我的代码。如果你想查看这个网站,它应该可以在gregsminecraft.dyndns.org:25566/file.php 上找到 编辑:我相信它不接受大的 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";
  }

【问题讨论】:

  • 我刚刚测试了您提供的 URL 并得到以下输出: 上传:iPhone intro.zip 类型:application/x-zip-compressed 大小:158.626953125 Kb 临时文件:/private/var/tmp/ php0ZyEoi 存储在:upload/iPhone intro.zip

标签: php file-upload upload zip


【解决方案1】:

您说您的上传表单在上传后会重定向?请记住,当脚本退出时,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 ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 2013-06-15
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多