php的上传问题,困扰了好久。情况是这样的
php.ini 限制了 upload 和 post 的最大数据 都是4m ,execution time 采用默认 30. 我以为上传大文件的时候,会在达到最大值(4M)或者超过execution time 时,脚本断掉,或者打印什么错误,可是php必须等整个文件到了服务器才能报错。 这样的话,如果上传100mb 的文件,那就得等很久。同时,在apache的error log 里,能看到,类似的warning ;
PHP Warning: POST Content-Length of 2835927 bytes exceeds the limit of 2097152 bytes in Unknown on line 0, referer: http:。。
这个警告 在 文件没有 完全到服务器的时候,就能在error_log 里看到,所以,我想 是不是有办法 在文件(100mb)没完全到服务器的时候,php脚本就能捕获那个警告,那样,就可以断掉上传了,我找了很久,不知道怎么做,trigger_error 也不知道 在什么时候触发。还有,apache 的上传允许大小 我没有限制,如果我限制,我得到就是 服务器 error了,不是我想要的 php的error ,我想得到php返回的文件大小超过设定的错误。请问有人懂吗?在php端,怎么在文件不完全到服务器的时候,判断文件超出预设值?多谢多谢
php.ini 限制了 upload 和 post 的最大数据 都是4m ,execution time 采用默认 30. 我以为上传大文件的时候,会在达到最大值(4M)或者超过execution time 时,脚本断掉,或者打印什么错误,可是php必须等整个文件到了服务器才能报错。 这样的话,如果上传100mb 的文件,那就得等很久。同时,在apache的error log 里,能看到,类似的warning ;
PHP Warning: POST Content-Length of 2835927 bytes exceeds the limit of 2097152 bytes in Unknown on line 0, referer: http:。。
这个警告 在 文件没有 完全到服务器的时候,就能在error_log 里看到,所以,我想 是不是有办法 在文件(100mb)没完全到服务器的时候,php脚本就能捕获那个警告,那样,就可以断掉上传了,我找了很久,不知道怎么做,trigger_error 也不知道 在什么时候触发。还有,apache 的上传允许大小 我没有限制,如果我限制,我得到就是 服务器 error了,不是我想要的 php的error ,我想得到php返回的文件大小超过设定的错误。请问有人懂吗?在php端,怎么在文件不完全到服务器的时候,判断文件超出预设值?多谢多谢
能获取HTTP请求标头的Content-Length最好。
// Check post_max_size
$POST_MAX_SIZE = ini_get('post_max_size');
$unit = strtoupper(substr($POST_MAX_SIZE, -1));
$multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1))); if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
echo POST_MAXIMUM_ERROR;
exit(0);
}