php://input 无法处理大文件

php://input 无法处理大文件,php,file-upload,upload,Php,File Upload,Upload,我正在使用一个带有ajax和PHP的上传脚本,它对小于80MB的文件非常有效。然而,如果文件大于80MB,它就会失败,甚至不会输出任何内容 代码是: $maxsize = getMaxFileSize(); $finalfile = $uploadpath . $finalname; $putdata = fopen("php://input", "r"); $fp = fopen($finalfile, "w"); $filesizecalc = 0; while ($data = fread

我正在使用一个带有ajax和PHP的上传脚本,它对小于80MB的文件非常有效。然而,如果文件大于80MB,它就会失败,甚至不会输出任何内容

代码是:

$maxsize = getMaxFileSize();
$finalfile = $uploadpath . $finalname;
$putdata = fopen("php://input", "r");
$fp = fopen($finalfile, "w");
$filesizecalc = 0;
while ($data = fread($putdata, 1024)) {
    fwrite($fp, $data);
    $filesizecalc = $filesizecalc + 1024;
}

fclose($fp);
fclose($putdata);
if ($filesizecalc <= $maxsize) {
    addFile($_SESSION['userdata']['userid'], $finalname);
    echo "$fn uploaded";
} else {
    unlink($finalfile);
}
exit();

让我们把它作为解决方案写下来,这样就可以正确地阅读,而不是在评论中挖掘

  • 在ini\u set命令之后,检查php\u info(),并进行一些配置 无法从脚本中更改变量有6个不同的 控制大上传的值。检查所有项目(列表和 (可以找到解释)
  • 签入apache 错误\实际错误的日志文件。(或查看访问日志以查看 服务器返回的请求状态是什么)
  • 可能有 某些限制请求的应用程序防火墙或apache配置 时间在本例中,您将看到响应代码,如“connection” 重置”
请尝试以下方法:



在ini\u设置后运行php\u info()。通常upload_max_filesize不能用ini_设置您是对的,它不是用ini_设置的。但是,主机将其设置为100M,对于99MB的文件来说应该足够了,对吗?此外,最大输入时间设置为60,这不是也太低吗?我想说,上传99MB的文件,100MB的限制是有风险的-你应该采取约10%额外的头,控制数据包等。100MB在60秒是1.7mb/s上传速度(13.5Mb上传链接)。可能还不够。我的主机刚刚将上传最大文件大小增加到1024,最大输入时间增加到3600,但它仍然不工作。这很奇怪:\n检查apache错误日志文件OK,我检查了所有内容,但仍然失败。所有配置变量都设置为大值,错误日志文件是干净的,访问日志始终显示OK 200。我在这里迷路了:\n你能上传访问日志的最后几行吗。最后一个参数应该是响应大小。此外,您还可以输入一些“echo”命令,看看scrpit能走多远。顺便说一句,如果你上传一个小文件会怎么样?尝试我添加的脚本。如果我在php://input?I 不要认为您需要为此使用php输入流。无论如何,这是解决问题的好办法。
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', 1);
ini_set('memory_limit', '1024M');
ini_set('upload_max_filesize', '1024M');
ini_set('post_max_size', '1024M');
ini_set('max_input_time', 10000);
ini_set('max_execution_time', 10000);
<?php
if (true)
  {
  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";
  }
?>