php - 为什么将文件上传到 PHP 时 $_FILES 为空?

标签 php apache file-upload

我的 Windows 7 计算机上安装了 WampServer 2。我正在使用 Apache 2.2.11 和 PHP 5.2.11。当我尝试从表单上传任何文件时,它似乎在上传,但在 PHP 中,$_FILES 数组为空。 c:\wamp\tmp 文件夹中没有文件。我已配置 php.ini 以允许文件上传等。 tmp 文件夹对当前用户具有读/写权限。我被难住了。

HTML:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <form enctype="multipart/form-data" action="vanilla-upload.php" method="POST">
        Choose a file to upload: <input name="uploadedfile" type="file" /><br />
        <input type="submit" value="Upload File" />
    </form>
</body>
</html>

PHP:

<?php
echo 'file count=', count($_FILES),"\n";
var_dump($_FILES);
echo "\n";
?>

最佳答案

以下是 PHP 文件上传检查 list :

  1. 检查 php.ini 是否有:
    file_uploads = On
    post_max_size = 100M
    upload_max_filesize = 100M
  • 您可能需要使用 .htaccess.user.ini如果您在共享主机上并且无权访问 php.ini .
  • 确保 您正在编辑正确的 ini 文件 – 使用 phpinfo()验证您的功能 实际正在应用设置。
  • 还要确保你没有 拼错大小 - 应该是 100M 不是 100MB .
  1. 确保您的 <form>标签有 enctype="multipart/form-data"属性。没有其他标签可以工作,它必须是您的 FORM 标签。仔细检查它是否拼写正确。仔细检查 multipart/form-data 是否被直引号包围,而不是从 Word 或网站博客中粘贴的智能引号(WordPress 将直引号转换为角引号!)。如果页面上有多个表单,请确保它们都具有此属性。手动输入它们,或者尝试手动输入单引号。

  2. 确保您没有两个具有相同 name 的输入文件字段属性。如果需要支持多个,请在名称末尾加上方括号:

    <input type="file" name="files[]">
    <input type="file" name="files[]">
    
  3. 确保您的 tmp 和上传目录设置了正确的读写权限。临时上传文件夹在 PHP 设置中指定为 upload_tmp_dir .

  4. 确保您的文件目标和 tmp/upload 目录不 里面有空格。

  5. 确保所有 <form>您的页面上有 </form>关闭标签。

  6. 确保您的 FORM 标签有 method="POST" . GET 请求不支持多部分/表单数据上传。

  7. 确保您的文件输入标签具有 NAME 属性。 ID 属性是不够的! ID 属性用于 DOM,不适用于 POST 负载。

  8. 确保您没有使用 Javascript 来禁用您的 <input type="file">提交字段

  9. 确保您没有嵌套 <form><form></form></form> 之类的表单

  10. 检查您的 HTML 结构中是否存在无效/重叠标签,例如 <div><form></div></form>

  11. 还要确保您上传的文件中没有任何非字母数字字符。

  12. 有一次,我花了几个小时试图弄清楚为什么会突然发生这种情况。原来我修改了.htaccess中的一些PHP设置,其中一个(不确定是哪个)导致上传失败和$_FILES为空。

  13. 您可以尝试在 _ 中避免使用下划线 (name="") <input> 的属性标记

  14. 尝试上传非常小的文件以缩小是否是文件大小问题。

  15. 检查您的可用磁盘空间。虽然非常罕见,但在这篇 PHP Manual page comment 中有所提及:

    If the $_FILES array suddenly goes mysteriously empty, even though your form seems correct, you should check the disk space available for your temporary folder partition. In my installation, all file uploads failed without warning. After much gnashing of teeth, I tried freeing up additional space, after which file uploads suddenly worked again.

  16. 请确保您提交的表单不是通过 AJAX POST 请求,而是通过导致页面重新加载的正常 POST 请求。我浏览了上面列表中的每一点,最后发现我的 $_FILES 变量为空的原因是我使用 AJAX POST 请求提交表单。我知道也有使用 ajax 上传文件的方法,但这可能是您的 $_FILES 数组为空的正当理由。

其中一些观点的来源:
https://web.archive.org/web/20050426084124/http://getluky.net/2004/10/04/apachephp-_files-array-mysteriously-empty/

关于php - 为什么将文件上传到 PHP 时 $_FILES 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3586919/

相关文章:

php - 如何在 Javascript 中使用 PHP 变量?

php - 使用 php、mysql 和 jquery 使图像具有交互性和可交换性

iOS:如何增加 NSURLSession 上传任务的 block 大小?

PHP AJAX 文件 uploader

php - impresspages 数据库大小为 3mb。 ip_widget 有很多行

php - 在 Drupal 7 中使用 SOAP Web 服务

php - 通过支持 HTTP_RANGE 的 Apache 和 PHP virtual() 函数发送文件

apache - 无法打开指向共享文件夹的 htdocs 软链接(soft link)

java - tomcat不支持major.minor版本52.0

javascript - 具有多个文件选择器的 Uploadcare 小部件