php://输入因大文件而失败

时间:2012-04-22 14:24:24

标签: 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($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();

这适用于几乎所有文件&lt; 80 MB,但对于大于80MB的文件,它不会输出任何东西,所以我甚至不知道出了什么问题,即使我设置了

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);

1 个答案:

答案 0 :(得分:3)

让我们把它作为解决方案写下来,这样就可以正确阅读而不是深入评论。

  • 在ini_set命令之后检查你的php_info(),一些配置 变量无法从脚本中改变~6种不同 控制大型上传的价值观。检查所有这些(列表和 可以找到here
  • 的explemenations
  • 检查apache error_log文件表示真正的错误。 (或检查access_log以查看 什么是服务器返回的请求状态)
  • 可能有 一些限制请求的应用程序防火墙或apache配置 时间。在这种情况下,您将看到响应代码,例如“连接” 复位”。

试试W3Scools upload script

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