0

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

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,知道有什么问题吗?谢谢你

4

2 回答 2

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

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

于 2013-09-25T13:49:13.313 回答
1

is_uploaded_file() 仅确认您引用的文件实际上是上传文件还是系统文件,例如 /etc/passwd。你可以在这里阅读更多信息:http: //php.net/manual/en/function.is-uploaded-file.php

如果 filename 命名的文件是通过 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";
  }
?>
于 2013-09-25T13:51:40.420 回答