大于100MB的PDF无法下载及PHP 8.1 memory_limit默认值咨询
问题1:大于100MB的PDF文件无法完成下载
- 检查PHP核心配置参数:
upload_max_filesize和post_max_size:需设置为大于100MB的数值,若上传阶段这两个参数不足,会直接拦截大文件请求max_execution_time:大文件下载需要更长的脚本执行周期,建议调高至300秒以上output_buffering:若缓冲值过大,可能导致内存溢出,可设置为Off或合理的小数值
- 检查Web服务器配置:
- Nginx:确认
client_max_body_size配置大于100MB,否则服务器会直接拒绝大文件请求 - Apache:检查
LimitRequestBody参数,需设置为大于104857600(100MB对应的字节数)
- Nginx:确认
- 优化下载代码逻辑:避免将整个PDF文件加载到内存,改用分段读取输出的方式,示例代码:
$filePath = 'path/to/target.pdf'; header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="'.basename($filePath).'"'); header('Content-Length: '.filesize($filePath)); $fileHandle = fopen($filePath, 'rb'); while (!feof($fileHandle)) { echo fread($fileHandle, 8192); flush(); } fclose($fileHandle); exit;
问题2:PHP 7.3与PHP 8.1未配置memory_limit时的默认值
memory_limit的默认值分运行环境差异:
- Web SAPI环境(如FPM、Apache模块):PHP 7.3和PHP 8.1的默认值均为
128M - CLI环境:PHP 7.3默认值为
128M,PHP 8.1默认值为-1(表示无内存限制)
可执行命令php -r "echo ini_get('memory_limit');"快速查看当前环境的实际生效值。
内容的提问来源于stack exchange,提问作者EternalSunShine
相关产品推荐
相关产品推荐

