【问题标题】:Php file upload always emptyphp文件上传总是空的
【发布时间】:2014-04-07 18:18:25
【问题描述】:

当我上传文件时,结果总是空的。 代码来自here

index.html 文件:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

upload_file.php:

<?php
  echo "Upload: " . $_FILES['file']['name'] . "<br>";
?>

结果是:

上传:

我配置了我的 php.ini,也启用了 file_upload、内存 5000M 和 tmp 位置。

我不知道这很重要,但我使用的是 Ubuntu。

phpinfo的结果和我配置的一样

怎么了?谢谢!

print_r 是显示数组()

回显 $_FILES['userfile']['error'];

HP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626+lfs/msql.so' - /usr/lib/php5/20090626+lfs/msql.so: cannot open shared object file: No such file or directory in Unknown on line 0
    [Wed Mar 05 17:48:16 2014] [notice] Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.10 with Suhosin-Patch configured -- resuming normal operations
    [Wed Mar 05 17:50:05 2014] [error] [client 127.0.0.1] File does not exist: /var/www/favicon.ico
    [Wed Mar 05 17:50:05 2014] [error] [client 127.0.0.1] File does not exist: /var/www/404.html
    [Wed Mar 05 17:55:32 2014] [error] [client 127.0.0.1] PHP Notice:  Undefined index: file in /var/www/uploadart.php on line 2, referer: http://localhost/index.php

在我原来的文件错误日志是空的。

【问题讨论】:

  • 您是否尝试在更改 php.ini 设置后重新启动 Apache?
  • 大约 3 次。我试过了。
  • 向我们展示print_r($_FILES); 的输出,就像@OneOfOne 建议的那样。
  • print_r 没有显示任何内容,只是 Array()
  • 如果这是您的全部代码,那么您缺少move_uploaded_file()

标签: php html file-upload is-empty


【解决方案1】:

“当我上传文件时,结果总是为空。代码来自here。”

您说您从 W3Schools 获取的代码不是您发布的代码,您提到您正在使用的代码只是:

<?php
  echo "Upload: " . $_FILES['file']['name'] . "<br>";
?>

W3Schools 在其页面上的内容(来自您提供的链接)如下:

HTML 表单:

<html>
<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html> 

PHP

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_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 "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?> 

然而,这缺少最重要的组件move_uploaded_file()

位于页面下方保存上传的文件下,如下所示:(假设您只想在数组中允许("gif", "jpeg", "jpg", "png")

<?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";
  }
?>

现在,您需要创建一个名为 upload 的文件夹,然后从您的根目录运行表单和 PHP,并确保该文件夹存在并具有适当的写入权限。

【讨论】:

  • 文件一直无效。 move_uploaded_file() 是更改文件位置而不是修改 $_FILES['file']['name'] 的输出,女巫为空。在 tmp 文件夹中什么都没有。
  • 您是否正在运行表单并将 PHP 放在根目录中(而不是在子文件夹中),upload 文件夹是否存在并具有适当的写入权限? @user3369031,您是否完全从我的答案中复制了所有内容?
  • 是的。在打开此主题之前,我检查了所有内容。
  • 我记得大约一周前看到另一个问题,关于一个类似的问题,即 OP 从 Ubuntu 服务器运行它并且必须在其他地方更改文件夹权限,我不记得它到底是什么.很可能发生同样的事情。 @user3369031
  • 这个问题不在stackoverflow上。我修复它并开始了另一个项目。我有一个 ftp 拒绝我在 /var/www/ 上拥有 777,这可不是什么大问题。
【解决方案2】:

您的代码很好。问题必须与您服务器上的配置有关。检查 php.ini 中的以下行:

file_uploads、upload_max_filesize、upload_tmp_dir、post_max_size、max_input_time

你也可以回显这一行:

$_FILES['userfile']['error']

【讨论】:

  • 如您的列表中所示:on, 5000M, /var/www/test/tmp, 8M, 60。代码什么也不返回。
  • 你刚刚复制了 $_FILES['userfile']['error'] 或者也使用了 $_FILES['file']['error'],你检查错误日志了吗?
  • 两者都返回 null。错误日志有很多,但我不知道它们是什么意思。已发布。
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2013-01-07
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多