原生PHP如何通过命令行的异步任务来实现大型excel表格的导出?
2026/9/17 23:37:42 网站建设 项目流程

首先,我们要明白异步任务的概念。异步任务是指,在执行某个操作时,不会阻塞后续代码的执行,即允许其他代码在等待某个可能耗时的任务完成时继续运行。

在PHP中,我们可以通过命令行(CLI)模式来执行异步任务。这通常是通过在服务器上设置一个cron job(定时任务)或使用类似nohup的命令来实现的。

底层原理
  1. 命令行模式:PHP不仅可以在Web服务器上运行,还可以在命令行中运行。在命令行模式中,PHP脚本可以像其他任何程序一样被直接调用和执行。
  2. 异步执行:通过使用如nohupscreen等工具,我们可以在后台运行PHP脚本,这样即使你关闭了终端或SSH连接,脚本也会继续运行。
  3. Excel导出:PHP可以通过一些库(如PhpSpreadsheet)来创建和导出Excel文件。这些库允许你构建Excel表格,填充数据,并将其保存为文件。
通俗解释

想象一下,你有一个大厨房(服务器),里面有一个厨师(PHP脚本)。通常,厨师会按照你给的菜谱(代码)一步步做菜(执行任务)。但有时候,某些步骤(如炖汤)需要很长时间,而你不想一直站在那里等。所以,你告诉厨师:“你继续炖汤,我先去玩会儿,炖好了叫我。”(这就是异步任务)。

现在,把这个场景应用到Excel导出上。导出大Excel文件就像炖一大锅汤,需要时间。你不希望你的网站或应用因为等待导出而卡住,所以你就告诉PHP:“你去后台慢慢导出,我先去做其他事情。”(使用命令行模式的异步执行)。

实例代码
  1. 安装PhpSpreadsheet

使用Composer来安装PhpSpreadsheet库:

composer require phpoffice/phpspreadsheet
  1. 编写导出脚本(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');
  2. 在命令行中异步执行
  3. 使用nohup命令来在后台运行脚本,并将输出重定向到一个文件以防止任何控制台活动:

  4. nohup php export_excel.php > output.log 2>&1 &

    这条命令会在后台启动export_excel.php脚本,并将标准输出和标准错误都重定向到output.log文件中。这样,即使你关闭了终端,导出任务也会继续执行。
    4.检查导出的Excel文件

    当脚本执行完毕后,你可以到/tmp/exported_excel.xlsx路径下找到导出的Excel文件。同时,output.log文件会记录脚本的执行情况,包括任何可能发生的错误或警告。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询