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

时间:2015-01-09 01:41:45

标签: php apache shell

首先很抱歉发布一个似乎已经被砸死的问题。但是,我所审查的问题都没有帮助我解决我的具体问题。

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

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

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

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

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

以下是您可以如何做到这一点的基本概要:

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