php:// input失败并带有大文件
作者:互联网
我正在使用带有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();
这几乎适用于几乎所有文件< 80 MB,但对于大于80 MB的文件,它不会输出任何内容,因此即使我设置了它,我也不知道出了什么问题
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);
解决方法:
让我们将其写下来作为解决方案,以便可以正确阅读而不是在注释中进行挖掘.
>在ini_set命令后检查您的php_info(),进行一些配置
脚本中无法更改的变量有〜6种不同
控制大量上传的价值.检查所有这些(列表和
可以找到here)
>签入apache
实际错误的error_log文件. (或查看access_log以查看
服务器返回的请求状态是什么)
>可能有
一些限制请求的应用防火墙或apache配置
时间.在这种情况下,您会看到响应代码,例如“连接
重启”.
<?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";
}
?>
标签:file-upload,upload,php 来源: https://codeday.me/bug/20191201/2080749.html