【问题标题】:PHP zip file upload does not workPHP zip文件上传不起作用
【发布时间】:2013-04-05 21:22:54
【问题描述】:

我的html表单:

<form action='' method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file">
<input type="submit" name="submit" value="Submit">
</form>

我的 php 文件:

if ($_POST['submit'] == "Submit") {
            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("/downloads/" . $_FILES["file"]["name"]))
            {
                echo $_FILES["file"]["name"] . " already exists. ";
            }
            else
            {
                move_uploaded_file($_FILES["file"]["tmp_name"],
                "/downloads/" . $_FILES["file"]["name"]);
                echo "Stored in: " . "/downloads/" . $_FILES["file"]["name"];
            }
}

我的 public_html 中有 2 个文件夹:tmpdownloads,都是 777 权限(只是为了测试)

此文件位于下载中的 .htaccess 保护文件夹中 (public_html/downloads/new/update.php) 我希望将 zip 文件上传到下载目录中。

此代码不会给我任何错误,但不会上传文件。为什么?

【问题讨论】:

  • 可怕的代码。您假设上传成功。您在文件系统操作中直接使用用户提供的文件名(恶意用户现在可以在您的服务器上随意乱写),并且您只需假设移动操作成功。
  • 问题是 '"/downloads/" 。 $_FILES["file"]["name"]' 已作为答案发布
  • 不要担心安全性,因为这个文件在一个只有我可以访问的受保护目录中......

标签: php html upload download zip


【解决方案1】:

尝试添加

if(move_uploaded_file(...)){
 echo "it works";
} else {
 echo "NOPE";
}

并且 替换:

 move_uploaded_file($_FILES["file"]["tmp_name"], "/downloads/" . $_FILES["file"]["name"]);

与:

 move_uploaded_file($_SERVER['DOCUMENT_ROOT'].'/'.$_FILES["file"]["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/downloads/" . $_FILES["file"]["name"]);

【讨论】:

    【解决方案2】:

    PHP 需要 MAX_FILE_SIZE 才能接收上传的文件

    <form action='' method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="10240000">
    <input type="file" name="file" id="file">
    <input type="submit" name="submit" value="Submit">
    </form>
    

    使用此表单,您可以上传 10 MB 或更少的 zip 存档...

    您还必须将 php.ini 中的 max_post_size 和 upload_max_filesize 设置为相同或更高的值才能上传文件

    使用这个 PHP 代码

    if ((isset($_POST['submit']) && $_POST['submit'] == "Submit") AND isset($_FILES)) {
            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("/downloads/" . $_FILES["file"]["name"]))
            {
                echo $_FILES["file"]["name"] . " already exists. ";
            }
            else
            {
                if(move_uploaded_file($_FILES["file"]["tmp_name"],
                "/downloads/" . $_FILES["file"]["name"]))
                       echo "Stored in: " . "/downloads/" . $_FILES["file"]["name"];
    
                else echo "file could not be processed";
            }
    

    }

    【讨论】:

      【解决方案3】:

      我就是这样解决的:

      HTML:

      <form enctype="multipart/form-data" method="post" action="">
      <input type="hidden" name="MAX_FILE_SIZE" value="300000" />
      <input type="file" name="file" id="file">
      <input type="submit" name="submit" value="Submit">
      </form>
      

      PHP:

      if($_POST['submit'] == "Submit") {
          $filename = $_FILES["file"]["name"];
          $source = $_FILES["file"]["tmp_name"];
          $type = $_FILES["file"]["type"];
          $name = explode(".", $filename);
          $target_path = "../".$filename;
          if(move_uploaded_file($source, $target_path)) {
              $message = "Your .zip file was uploaded";
          } else {    
              $message = "ERROR";
          }
              if($message) echo $message;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-13
        • 2015-02-11
        • 2017-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多