原生PHP如何通过命令行的异步任务来实现大型excel表格的导出?
发布时间:2026/9/17 23:37:47 锦皓数字建站

首先我们要明白异步任务的概念。异步任务是指在执行某个操作时不会阻塞后续代码的执行即允许其他代码在等待某个可能耗时的任务完成时继续运行。在PHP中我们可以通过命令行CLI模式来执行异步任务。这通常是通过在服务器上设置一个cron job定时任务或使用类似nohup的命令来实现的。底层原理命令行模式PHP不仅可以在Web服务器上运行还可以在命令行中运行。在命令行模式中PHP脚本可以像其他任何程序一样被直接调用和执行。异步执行通过使用如nohup或screen等工具我们可以在后台运行PHP脚本这样即使你关闭了终端或SSH连接脚本也会继续运行。Excel导出PHP可以通过一些库如PhpSpreadsheet来创建和导出Excel文件。这些库允许你构建Excel表格填充数据并将其保存为文件。通俗解释想象一下你有一个大厨房服务器里面有一个厨师PHP脚本。通常厨师会按照你给的菜谱代码一步步做菜执行任务。但有时候某些步骤如炖汤需要很长时间而你不想一直站在那里等。所以你告诉厨师“你继续炖汤我先去玩会儿炖好了叫我。”这就是异步任务。现在把这个场景应用到Excel导出上。导出大Excel文件就像炖一大锅汤需要时间。你不希望你的网站或应用因为等待导出而卡住所以你就告诉PHP“你去后台慢慢导出我先去做其他事情。”使用命令行模式的异步执行。实例代码安装PhpSpreadsheet使用Composer来安装PhpSpreadsheet库composer require phpoffice/phpspreadsheet编写导出脚本(export_excel.php):?php require vendor/autoload.php; // 引入PhpSpreadsheet库 use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // 创建一个新的Excel文档 $spreadsheet new Spreadsheet(); $sheet $spreadsheet-getActiveSheet(); // 填充数据到Excel中这里只是示例数据 $sheet-setCellValue(A1, Hello); $sheet-setCellValue(B1, World!); // ... 可以继续添加更多数据和格式设置等 ... // 保存Excel文件到某个目录例如/tmp/exported_excel.xlsx $writer new Xlsx($spreadsheet); $writer-save(/tmp/exported_excel.xlsx);在命令行中异步执行使用nohup命令来在后台运行脚本并将输出重定向到一个文件以防止任何控制台活动nohup php export_excel.php output.log 21 这条命令会在后台启动export_excel.php脚本并将标准输出和标准错误都重定向到output.log文件中。这样即使你关闭了终端导出任务也会继续执行。4.检查导出的Excel文件当脚本执行完毕后你可以到/tmp/exported_excel.xlsx路径下找到导出的Excel文件。同时output.log文件会记录脚本的执行情况包括任何可能发生的错误或警告。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。