通过网页执行PHP脚本的服务器端执行


Execute server-side execution of PHP script via webpage

首先很抱歉发布一个似乎之前在SO上被鞭打致死的问题。但是,我审查过的所有问题都没有帮助我解决我的特定问题。

我构建了一个Web应用程序,该应用程序在PHP中运行了广泛的数据处理例程(即MySQL查询,计算等)。

根据提供给应用程序的数据量,此处理可能需要相当长的时间,因此脚本需要在服务器端运行并独立于 Web 前端运行。

但是,有一个问题。似乎只要通过 cgi 调用脚本,我就无法控制脚本执行时间限制。

当我通过SSH和命令行运行脚本时,无论处理数据需要多长时间,它都可以正常工作。

但是,如果我在通过网络服务器调用的 php 脚本中使用 exec() 命令,我总是在大约 45 秒后End of script output before headers出现错误。

与其摆弄服务器设置(在可移植性方面是一场噩梦),我想找到一种独立于 cgi 启动脚本的解决方案。

有什么建议吗?

不要直接从网站(AKA,直接从 Apache 执行长脚本),因为正如你提到的,它会阻塞直到它完成并可能超时。 相反,请使用网站计划立即运行作业(长脚本的执行)。

以下是如何执行此操作的基本概述:

  1. 创建一个新的小型数据库来存储作业请求,包括字段job_idprocessing_statusrun_start_time 和更多相关字段
  2. 创建一些 Ajax,该 Ajax 访问您的服务器并将"作业请求"写入此作业数据库,设置为立即执行。
  3. 添加定期监视新作业的 crontab 脚本或机器人。 如果它找到尚未处理但已通过run_start_time的作业,请使用exec()或其他命令执行器运行它。 这样命令就不会超时,因为它不是由 Apache 运行,而是由 cron 守护程序运行。
  4. 命令完成后,更新作业数据库,指出处理已完成。
  5. 从您的网站中,编写一个前端,允许用户查看请求的作业是否已完成。 完成后,它会显示某种"完成"指示器或类似内容。