是否可以强制 PHP 代码继续 运行,如果上传的文件超过此 php.ini 指令(例如 upload_max_filesize)?
Is it possible to force PHP code to continue running, if a php.ini directive such as upload_max_filesize is exceeded when uploaded file exceeds this?
我有一个 PHP 页面,页面顶部有 php (v7.4.7) 脚本。该页面用作文件上传器,每次上传最多 10 个文件,最大文件大小在脚本中设置。
该站点运行完美,为用户生成每个文件结果的 table。
也就是说,除非有人上传的文件大于 php.ini 文件中的 upload_max_filesize 指令。此时,脚本停止运行,因此无法继续向用户提供必要的结果。没有返回任何结果,结果 table 因此是空的,用户可能会错误地认为一切顺利。
我已经尝试添加 try/catch 个块,但脚本仍然无法完成。这是设计使然,还是有办法在超出此指令时将脚本强制为 run/complete? HTML/PHP 代码非常标准,如各种教程等所演示的那样
非常感谢。
违反upload_max_filesize
不会中止脚本执行。它只会导致 $_FILES
中的 error
键变成 UPLOAD_ERR_INI_SIZE
.
很可能,您正在达到一个完全不同的极限。例如,Apache 有
LimitRequestBody
和PHP本身就有post_max_size
甚至max_file_uploads
。通常,这些指令也不会中止脚本,而只是清除多余的数据。
我的建议是找到所有可能影响文件上传的指令,将它们一一设置为人为的低限制,并验证它们对您的数据有何影响。对于 $_SERVER['REQUEST_METHOD']
为 POST
但 $_POST
为空的请求,我通常执行的检查是验证 $_SERVER['CONTENT_LENGTH']
是否大于零。除此之外,检查 $_FILES
中的 error
应该已经完全覆盖了。
; Allow enough time for the upload to complete
max_input_time = 1200
; Max file size
upload_max_filesize = 50M
; Greater than upload_max_filesize to ease diagnose slightly large files
post_max_size = 100M
if (
empty($_FILES) &&
empty($_POST) &&
isset($_SERVER['REQUEST_METHOD']) &&
strtolower($_SERVER['REQUEST_METHOD'])=='post'
) {
// Error: post body was too large
// Bytes sent (and discarded): filter_input(INPUT_SERVER, 'CONTENT_LENGTH')
} elseif (
isset($_FILES['foo']) &&
$_FILES['foo']['error'] != UPLOAD_ERR_NO_FILE
){
// Upload
if ($_FILES['foo']['error'] === UPLOAD_ERR_OK) {
// Successful upload
}else{
// Failed upload
}
} else {
// No upload
}
我有一个 PHP 页面,页面顶部有 php (v7.4.7) 脚本。该页面用作文件上传器,每次上传最多 10 个文件,最大文件大小在脚本中设置。 该站点运行完美,为用户生成每个文件结果的 table。
也就是说,除非有人上传的文件大于 php.ini 文件中的 upload_max_filesize 指令。此时,脚本停止运行,因此无法继续向用户提供必要的结果。没有返回任何结果,结果 table 因此是空的,用户可能会错误地认为一切顺利。
我已经尝试添加 try/catch 个块,但脚本仍然无法完成。这是设计使然,还是有办法在超出此指令时将脚本强制为 run/complete? HTML/PHP 代码非常标准,如各种教程等所演示的那样
非常感谢。
违反upload_max_filesize
不会中止脚本执行。它只会导致 $_FILES
中的 error
键变成 UPLOAD_ERR_INI_SIZE
.
很可能,您正在达到一个完全不同的极限。例如,Apache 有
LimitRequestBody
和PHP本身就有post_max_size
甚至max_file_uploads
。通常,这些指令也不会中止脚本,而只是清除多余的数据。
我的建议是找到所有可能影响文件上传的指令,将它们一一设置为人为的低限制,并验证它们对您的数据有何影响。对于 $_SERVER['REQUEST_METHOD']
为 POST
但 $_POST
为空的请求,我通常执行的检查是验证 $_SERVER['CONTENT_LENGTH']
是否大于零。除此之外,检查 $_FILES
中的 error
应该已经完全覆盖了。
; Allow enough time for the upload to complete
max_input_time = 1200
; Max file size
upload_max_filesize = 50M
; Greater than upload_max_filesize to ease diagnose slightly large files
post_max_size = 100M
if (
empty($_FILES) &&
empty($_POST) &&
isset($_SERVER['REQUEST_METHOD']) &&
strtolower($_SERVER['REQUEST_METHOD'])=='post'
) {
// Error: post body was too large
// Bytes sent (and discarded): filter_input(INPUT_SERVER, 'CONTENT_LENGTH')
} elseif (
isset($_FILES['foo']) &&
$_FILES['foo']['error'] != UPLOAD_ERR_NO_FILE
){
// Upload
if ($_FILES['foo']['error'] === UPLOAD_ERR_OK) {
// Successful upload
}else{
// Failed upload
}
} else {
// No upload
}