$ _FILES不为空,但文件未上传

时间:2013-09-25 13:37:11

标签: php file

我有一个表单来上传文件,检查它是否到达的代码在这里:

if (is_uploaded_file($_FILES['foto'] ['tmp_name'])){
   echo "file is valid and was uploaded";
   print_r($_FILES);
 }

它说:

 file is valid and was uploadedArray ( [foto] => 
 Array ( [name] => Penguins.jpg     [type] => image/jpeg [tmp_name]   
 => /var/www/uploads/phpf8ECTX [error] => 0 [size] => 777835 ) ) 
 Array ( [foto] => Array ( [name] => Penguins.jpg [type] => image/jpeg [tmp_name] 
=> /var/www/uploads/phpf8ECTX [error] => 0 [size] => 777835 ) ) array(1) { 
["foto"]=> array(5) { ["name"]=> string(12) "Penguins.jpg" ["type"]=> string
(10) "image/jpeg" ["tmp_name"]=> string(26) "/var/www/uploads/phpf8ECTX" ["error"]
=> int(0) ["size"]=> int(777835) } } 

但文件没有到达,php.ini配置正确并且/ var / www / uploads目录有权为所有用户编写,我在linux中运行apache2,任何关于什么是错的想法? 谢谢

2 个答案:

答案 0 :(得分:3)

完成后,您必须move_uploaded_file到上传目录。我的理解是,如果你没有明确地将文件保存到不同的文件夹,PHP将上传到临时文件夹并在之后删除它。

if (is_uploaded_file($_FILES['foto'] ['tmp_name'])){
    if (file_exists("upload/" . $_FILES["foto"]["name"]))
    {
        //Maybe you want to issue an error message if the file already exists, like this.
        echo $_FILES["foto"]["name"] . " already exists. ";
    }
    else
    {
        move_uploaded_file($_FILES["foto"]["tmp_name"],
            "upload/" . $_FILES["foto"]["name"]);
    }
}

请记住为您的上传设置不同的临时目录。

答案 1 :(得分:1)

is_uploaded_file()仅确认您引用的文件实际上是上传文件而不是系统文件,例如/ etc / passwd。您可以在此处详细了解:http://php.net/manual/en/function.is-uploaded-file.php

  

如果文件名命名的文件是通过HTTP POST上传的,则返回TRUE。   这有助于确保恶意用户未尝试过   欺骗脚本处理它不应该的文件   工作 - 例如,/ etc / passwd。

     

如果有任何机会,这种检查尤其重要   任何完成上传文件的内容都可以将其内容透露给   用户,甚至是同一系统上的其他用户。

验证文件名和属性后(根据您的具体要求),您必须调用move_uploaded_file()将文件从其临时位置移动到永久的家。

http://www.php.net/manual/en/function.move-uploaded-file.php

来自W3Schools的实际上传脚本的一个很好的示例:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts))
  {
  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";
  }
?>