You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP大文件上传成功但浏览器无响应问题求助

排查大文件上传成功但无响应的问题

针对你在Amazon Linux 2 + Apache 2.4.54 + PHP 7.2.34环境下遇到的大文件上传后无响应问题,以下是具体排查步骤:

  • 检查Apache请求体与超时配置
    Apache默认可能存在请求体大小或超时限制,导致上传完成后无法返回响应:

    1. 查找并修改LimitRequestBody:在httpd.conf或虚拟主机配置文件中,确保设置为足够大的值(比如100MB):
      LimitRequestBody 104857600
      
      用命令快速检查现有配置:grep -r "LimitRequestBody" /etc/httpd/conf/ /etc/httpd/conf.d/
    2. 调整Apache超时时间:将Timeout和ProxyTimeout(若使用mod_proxy_fcgi连接php-fpm)设置为300秒以上:
      Timeout 300
      ProxyTimeout 300
      
      修改后重启Apache:sudo systemctl restart httpd
  • 检查php-fpm进程超时配置
    php-fpm的进程超时可能导致上传完成后进程被终止,无法返回响应:
    打开php-fpm的www.conf配置文件(通常在/etc/php-fpm.d/www.conf),找到request_terminate_timeout,设置为300秒:

    request_terminate_timeout = 300
    

    重启php-fpm:sudo systemctl restart php-fpm

  • 验证纯PHP脚本的输出逻辑
    确保你的测试脚本在上传完成后有明确的输出动作,避免因输出缓冲导致无响应:
    示例测试脚本:

    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
        $uploadDir = './uploads/';
        if (!is_dir($uploadDir)) mkdir($uploadDir, 0755);
        if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadDir . $_FILES['file']['name'])) {
            // 强制输出缓冲内容
            ob_flush();
            flush();
            echo "上传成功";
            exit;
        }
    }
    ?>
    <form method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">上传</button>
    </form>
    
  • 检查PHP临时目录与磁盘状态

    1. 确认upload_tmp_dir的权限:在php.ini中找到该配置,确保apache/php-fpm进程对该目录有读写权限(通常是apache用户)
    2. 检查服务器磁盘空间:用df -h查看是否有分区已满,导致后续操作卡住
  • 启用详细PHP错误日志
    即使现有日志无报错,可能是错误级别不够:
    在php.ini中修改以下配置:

    error_reporting = E_ALL
    log_errors = On
    error_log = /var/log/php_errors.log
    

    重启php-fpm后重新测试,查看日志是否有隐藏错误

内容的提问来源于stack exchange,提问作者john0928

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:25:26