【问题标题】:PHP HTML: File upload not workingPHP HTML:文件上传不起作用
【发布时间】:2014-11-11 10:45:24
【问题描述】:

我不敢相信我不得不问这个问题,但由于某种原因,我的文件无法正常工作。它叫做 ajax.php(虽然不介意这个名字),下面是确切的代码:

<?php
error_reporting(-1);

print_r($_POST);
print_r($_FILES);
?>

<form action="ajax.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <input type="text" name="first" value="Bob" />
    <input type="text" name="middle" value="James" />
    <input type="text" name="last" value="Smith" />
    <input type="file" name="something" />
    <input type="submit" value="Submit" />
</form>

当我提交而不附加文件时,它会在数组中打印数据。当我提交 WITH 文件时,不会填充任何数组。

我错过了什么明显的东西???

无文件

Array ( [MAX_FILE_SIZE] => 30000 [first] => Bob [middle] => James [last] => Smith )
Array ( [something] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )

带文件

Array ( )
Array ( )

预计有文件

Array ( [MAX_FILE_SIZE] => 30000 [first] => Bob [middle] => James [last] => Smith )
Array ( [something] => Array ( [name] => sample.jpg [type] => image/jpg [tmp_name] => whatever.jpg [error] => 0 [size] => 1248 ) )

更新

它似乎正在另一台服务器上运行,它肯定是我的 WAMP 的一些配置,这意味着我的问题被错误地提出,因此我将其关闭。向那些在我的愚蠢上浪费时间的人道歉。

【问题讨论】:

  • 它对我来说很好用!请发布你得到的输出和你期望得到的结果
  • 这真的很奇怪!因为它应该/必须起作用!只是为了清楚起见,如果您不选择文件并提交表单,则会得到数组,如果您选择文件并提交表单,则会得到空数组?
  • 您确定在提交后看到了吗?这就是您在提交前首次显示表单时会看到的内容。
  • @Rizier123 这不会导致参数变量为空。 $_POST 参数应该还会出现,并且$_FILES['something']['error'] 中应该有一些东西说文件无法上传。
  • @Bing 建议您回答并解释您错过了什么!因为我认为如果他快速找到这个答案,另一个有同样问题的人会很高兴:D

标签: php html forms


【解决方案1】:

这似乎是一个配置问题。我想说post_max_size 太小了。这可以解释为什么上传文件时$_POST 超全局为空。从手册...

如果帖子数据的大小大于post_max_size,则$_POST$_FILES 超全局变量为空。

您需要将此值设置为大于upload_max_filesize。例如,我的一台服务器有...

file_uploads=On
upload_max_filesize=12M
post_max_size=20M

【讨论】:

  • 它应该在空数组之外显示错误:警告:84706071字节的POST内容长度超过第0行未知中8388608字节的限制......也许该功能在他的服务器中被禁用.
  • @ADASein 可能是。我之前没有遇到过这个错误,但我看到了空的超级全局变量
  • 确实这一定是一个配置问题(因为我在 AWS LAMP 服务器上没有这个问题,只是我的本地 WAMP 一个),但我的错误报告已调到最大值,它给了我什么都没有。
  • @Bing 对于我的回答中提到的属性,您的配置是什么样的?
【解决方案2】:

如果您尝试通过 Ajax 发送上传的文件,您可以查看我的问题和答案。在这里你可以找到所有的 javascript 代码。 How to send data to server while upload file?

您可以分两次发送数据。 首先上传你的文件,然后在里面上传完成, 其次把你的ajax发送你的数据,不用文件上传。

【讨论】:

  • 他没有使用 AJAX,他使用的是普通的表单提交。不要让ajax.php 这个名字让你感到困惑。
【解决方案3】:

问题在于 MAX_FILE_SIZE

 <input type="hidden" name="MAX_FILE_SIZE" value="30000" />

MAX_FILE_SIZE 隐藏字段以字节为单位,所以要么用更高的值替换它,要么将其删除。

试试这个

      <form action="ajax.php" method="post" enctype="multipart/form-data">
       <input type="hidden" name="MAX_FILE_SIZE" value="2597152" />
       <input type="text" name="first" value="Bob" />
       <input type="text" name="middle" value="James" />
       <input type="text" name="last" value="Smith" />
       <input type="file" name="something" />
        <input type="submit" value="Submit" />
     </form>

输出:

  Array
   (
          [MAX_FILE_SIZE] => 2597152
          [first] => Bob
          [middle] => James
          [last] => Smith
   )
 Array
 (
    [something] => Array
      (
           [name] => Desert.jpg
           [type] => image/jpeg
           [tmp_name] => D:\wamp\tmp\php3191.tmp
           [error] => 0
           [size] => 845941
     )

  )

我会建议你删除 MAX_FILE_SIZE,因为让用户对输入感兴趣并不是一个好习惯。如果您为此使用 SERVER 端验证会更好。

【讨论】:

  • 我最初没有它,删除它并没有改变任何东西。我正在使用本地主机(WAMP 服务器)...我想知道是不是这样。文件上传正在其他地方工作...
  • 我也在 locahost(WAMP 服务器)上检查了这个并且它工作正常。您是否使用不同大小的不同文件对其进行了测试?
  • 有什么实际使用MAX_FILE_SIZE 值吗?我认为我从未见过它在实践中得到应用。
  • 是的,MAX_FILE_SIZE 影响文件上传,如果文件大小大于 MAX_FILE_SIZE,则返回错误 2。你问的是这个吗?
猜你喜欢
  • 2014-08-08
  • 2015-02-11
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多