【发布时间】:2014-02-11 20:20:12
【问题描述】:
我正在尝试将文件保存在我的服务器上。它适用于小文件,但不适用于大文件。
在 JavaScript 中,我发送带有 XMLHttpRequest 的文件,如下所示
var ajax = new XMLHttpRequest();
ajax.open('POST', configuration.backend + 'ajax/uploadVideo', true);
ajax.setRequestHeader('X-File-Name', input.files[0].name);
ajax.setRequestHeader('X-File-Size', input.files[0].size);
ajax.send(input.files[0]);
在 PHP 中,此脚本将输入保存到硬盘:
$filename = $_SERVER['HTTP_X_FILE_NAME'];
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$new_filename = uniqid().'.'.$extension;
$fh = fopen(DOCROOT.'/public/videos/'.$new_filename, 'w');
fwrite($fh, file_get_contents('php://input'));
fclose($fh);
该脚本适用于较小的文件,但不适用于较大的文件。它只是创建一个 0 字节的文件。 (8.7MB 不工作,而 5.7MB 工作)。我没有收到任何 PHP 错误。错误报告级别为E_ALL & ~E_DEPRECATED。
我也尝试增加post_max_size、upload_max_filesize和memory_limit的值,但没有任何改变。
【问题讨论】:
-
原谅我问了这么明显的问题,但是你改了php.ini后有没有重启apache?
-
我没有看到任何
file_get_contents,但我看到了file_put_contents。put是问题所在,是吗? -
我在想 upload_max_filesize 不能用 ini_set() 改变。
-
快速提问,当脚本从 ajax 触发时,你怎么知道你有任何错误,但我没有看到任何处理错误响应的东西?您是否检查了
inspector中的network选项卡以查看返回的response code是什么?要回答上述问题,只需echo ini_get('upload_max_filesize'); -
@Ohgodwhy 听起来 OP 正在使用他们自己的服务器
标签: javascript php