gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:45:56 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com