【发布时间】:2015-01-09 01:41:45
【问题描述】:
首先很抱歉发布一个问题,该问题似乎已在 SO 上被鞭笞致死。但是,我查看的所有问题都没有帮助我解决我的具体问题。
我已经构建了一个 Web 应用程序,该应用程序在 PHP 中运行广泛的数据处理例程(即 MySQL 查询、计算等)。
根据提供给应用程序的数据量,此处理可能需要相当长的时间,因此脚本需要在服务器端运行并且独立于 Web 前端。
但是有一个问题。只要通过cgi调用脚本,我似乎无法控制脚本执行时间限制。
当我通过 SSH 和命令行运行脚本时,无论处理数据需要多长时间,它都能正常工作。
但是,如果我在通过网络服务器调用的 php 脚本中使用 exec() 命令,我总是会在大约 45 秒后出现错误 End of script output before headers。
我不想摆弄服务器设置(就可移植性而言是一场噩梦),我想找到一个独立于 cgi 启动脚本的解决方案。
有什么建议吗?
【问题讨论】:
-
" 独立于 cgi。"所以 mod_php ?
-
是的,但不是。这是一个托管解决方案,对服务器配置的访问受限。所以我必须找到一个在
mod_fastcgi为默认值时有效的解决方案 -
你能给我们看看php代码吗?并且您是否检查了任何其他不需要太多执行时间的命令 exec() 是否有效?只有时间限制是障碍?
-
好吧,代码量很大,我不确定它是否有帮助。正如我所说,只要我通过 SSH 执行脚本,它就可以正常工作。仅当通过 HTTP 调用时,我才会遇到脚本结束问题
-
长时间运行的作业应该与 Web 服务器无关。应该有一个独立于 Web 服务器的基础设施,可以运行长时间运行的作业;例如队列工作者系统,例如 Gearman、ØMQ、cron 作业等。如果您的服务器受到限制以至于不允许此类基础架构,那么在该系统上可能根本不可能。