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

Laravel应用部署Ubuntu服务器后PhpSpreadsheet致Apache崩溃求助

排查方案

1. 修正PHP版本笔误并确认依赖

你提到的线上PHP2.4明显是笔误,应该是PHP8.2/8.4版本。先确认线上服务器的PHP版本与PhpSpreadsheet的兼容情况:PhpSpreadsheet 1.29+要求PHP7.4及以上,2.0+要求PHP8.1及以上,执行composer show phpoffice/phpspreadsheet对比本地和线上的版本号,确保版本一致。

2. 检查PHP扩展是否缺失

PhpSpreadsheet处理Xlsx文件需要以下核心扩展,线上服务器可能缺失:

  • xml(必选,解析Xlsx内部的XML结构)
  • zip(必选,解压Xlsx压缩包)
  • mbstring(可选,处理多字节字符)

执行php -m查看已安装的扩展,对比本地的扩展列表,缺失的话在Ubuntu上安装(以PHP8.2为例):

sudo apt install php8.2-xml php8.2-zip php8.2-mbstring
sudo systemctl restart apache2

3. 查看Apache错误日志定位崩溃原因

Apache崩溃时会在日志中留下详细的错误信息,Ubuntu下的日志路径一般为/var/log/apache2/error.log,执行以下命令查看实时日志:

tail -f /var/log/apache2/error.log

触发崩溃代码后,根据日志信息判断是内存不足、扩展冲突还是段错误等问题。

4. 调整PHP内存限制

处理Xlsx文件需要一定内存,线上PHP的内存限制可能低于本地配置。查看当前内存限制:

php -i | grep memory_limit

如果值低于256M,修改Apache对应的php.ini文件(路径一般为/etc/php/8.2/apache2/php.ini):

memory_limit = 256M

修改后重启Apache。

5. 用最小化脚本排除框架干扰

编写一个不依赖Laravel的独立PHP脚本,放在Apache网站根目录测试:

<?php
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;

try {
    $reader = IOFactory::createReader('Xlsx');
    echo "Reader created successfully";
} catch (Exception $e) {
    echo "Error: " . $e->getMessage();
}

访问该脚本,若仍崩溃则排除Laravel框架的影响,问题出在服务器环境本身。

6. 切换Apache的MPM模式

Ubuntu默认的Apache MPM event模式,部分PHP扩展在该模式下可能存在兼容性问题,可切换到prefork模式:

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo systemctl restart apache2

内容的提问来源于stack exchange,提问作者Mɛ̂nkam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:20:33