spatie/simple-excel 安装与使用需满足 PHP ≥ 8.0、启用 zip 和 xml 扩展,确保 Composer 版本较新,写入 XLSX 时用绝对可写路径并正确设置响应头。
Composer 安装 spatie/simple-excel 失败?先确认 PHP 版本和扩展
spatie/simple-excel 要求 PHP ≥ 8.0,且必须启用
和
扩展(XLSX 依赖 ZIP 解压 + XML 解析)。常见报错如
或
,基本都卡在这儿。
运行
确认版本 ≥ 8.0
运行
检查扩展是否加载
Linux 下缺 zip 扩展:通常需
(Debian/Ubuntu)或
(CentOS/RHEL),然后重启 PHP-FPM 或 Apache
Windows 用户注意:PHP.ini 中取消注释
和
(dom 是 xml 的依赖)
composer
require 报错“could not parse version constraint”?检查 Composer 版本
老版本 Composer(^1.16.0),会直接报解析错误。这不是包的问题,是工具太旧。
执行
,低于
就得升级
升级命令:
(全局安装)或
(局部)
升级后重试
,别加
或分支名——稳定版已足够覆盖 CSV/XLSX 基础读写
读取 XLSX 文件时内存爆掉或超时?别用
直读大文件
默认把整张表加载进内存,10MB 以上的 XLSX 很容易触发
或
。它适合小数据(
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
大文件必须用流式读取:
控制单次缓冲大小
更稳妥的做法是配合
迭代处理,避免全量载入:
CSV 场景下,
很常用,但 XLSX 不一定有表头——得看 Excel 实际结构,别无脑链式调用
写入 XLSX 报错 “Could not open file for writing”?路径和权限比想象中敏感
的
必须是**可写的绝对路径**,相对路径(如
)在 CLI 和 Web 环境下行为不一致,Web 下常因工作目录是
导致写入失败。
写入前务必用
检查父目录权限
推荐用
构造绝对路径
注意:XLSX 写入不支持追加模式(
),每次都是新建文件;若需多批次写入,得自己缓存数据再一次性输出
导出到浏览器时,别忘了设 header:
和
实际用起来,最麻烦的从来不是语法,而是 PHP 环境扩展、Composer 工具链、文件系统权限这三块拼图没对齐。少一个,
就卡住,
就崩掉,连 demo 都跑不起来。
zipxmlClass 'ZipArchive' not foundPackage spatie/simple-excel has a PHP requirement incompatible with your PHP versionphp -vphp -m | grep -E "zip|xml"sudo apt install php-zipsudo yum install php-pecl-zipextension=zipextension=domcomposer --version2.0.0composer self-updatephp composer.phar self-updatecomposer require spatie/simple-excel@devSimpleExcelReader::create()SimpleExcelReader::create()Allowed memory size exhaustedMaximum execution time exceededSimpleExcelReader::create($path)->usingMemoryLimit(64 * 1024 * 1024)->eachRow(...)use Spatie\SimpleExcel\SimpleExcelReader;
SimpleExcelReader::create('data.xlsx')->eachRow(function (array $row) {
// 每行单独处理,不存历史
processRow($row);
});
->skipFirstRow()SimpleExcelWriter::create($filename)$filenameexports/report.xlsx/var/www/htmlis_writable(dirname($filename))__DIR__ . '/exports/report-' . date('Ymd-His') . '.xlsx'appendheader('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment; filename="report.xlsx"');requirecreate()