2013-04-05 179 views
1

我的HTML表单:PHP zip文件上传不起作用

<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个权限(刚测试)

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

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

+3

可怕的代码。你假设上传成功。你直接在文件系统操作中使用用户提供的文件名(恶意用户现在可以在你的服务器上随意涂写),并且你简单地假设移动操作成功。 – 2013-04-05 21:24:57

+0

问题在于“/ downloads /”。 $ _FILES [“文件”] [“名称”]'已被张贴为答案 – craig1231 2013-04-05 22:11:16

+0

不担心安全,因为这个文件是在一个受保护的目录,只有我可以访问... – Laurent 2013-04-06 08:15:45

回答

0

这是我如何解决它:

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; 
} 
2

尝试增加

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"]); 
+0

不,它返回不 – Laurent 2013-04-06 08:19:33

1

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或更小的拉链档案馆...

你还必须设置max_post_size并在php.ini的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"; 
     } 

}