【发布时间】:2018-08-16 00:44:26
【问题描述】:
我有一个无法解决的问题。我正在开发一个脚本,并且我有一个长时间运行的过程,简而言之,我正在从外部 url 中抓取一些数据,然后我将这些数据添加到数据库中,这大约需要 30 分钟左右。
我使用了 @ini_set( "max_execution_time", 1800 ); 来让脚本运行足够长的时间。
类似这样的:
function calculator_get_games() {
@ini_set( "max_execution_time", 1800 );
$api = Api::getInstance();
$api::get_all_games();
}
这适用于我的本地主机。问题是,当然,共享主机环境不起作用。脚本在几分钟后停止,我收到 503 错误。
奇怪的是,我认为它与 max_execution_time 无关,因为脚本在刹车前运行了几分钟,并且服务器上的 max_execution_time 设置为 60 秒。我在某处读到我可以使用 set_time_limit() 函数来重置计数器或延长脚本的执行时间,但这并没有帮助,一段时间后我得到了同样的错误。我还读到一些共享主机公司对 PHP 脚本可以运行的时间设置了限制,与 max_execution_time 无关。
问题是脚本可以被不同的用户使用,而我无法控制服务器。因此,我希望找到一种方法,让脚本即使在上述共享主机上也能运行,如果可能的话,这样用户就可以在几乎任何托管环境上毫无问题地使用脚本。
因此,感谢任何帮助。我可以使用的任何想法或替代方法。
谢谢。
编辑:
就像 Jamie_D 指出的那样,我不够清楚。我已经在后台使用 WordPress Cron 来启动脚本并每天更新它。但它在我尝试从浏览器执行脚本的同时刹车。我正在开发一个用户基本上可以在任何服务器上使用的插件。在插件激活时,WP cron 将使用 file_get_contents 开始抓取数据,并在 30 分钟后返回数据,这些数据将馈送到数据库中。希望能澄清一点,很抱歉造成混乱,我在其中一些事情上还是个初学者。
【问题讨论】:
-
您联系过您的托管服务提供商吗?共享主机帐户有很多限制。这就是我们转向自我管理基础设施的原因之一。
-
您是在 CLI(命令行)还是在浏览器中运行它。 Apache 有自己的超时设置,独立于 PHP。 CLI 不会出现超时问题。
-
@ArtisticPhoenix 实际上我正在使用 wp cron,我已经更新了问题,抱歉,我不确定 cli 和 php 在 wordpress 中是如何工作的。但我尝试从浏览器和 cron 执行该功能,它同时刹车。
-
cli 对 wordpress 或 Apache 一无所知。 Wp Cron 不是 cron,它不是 cli,它只是在有人访问该站点时运行,如果它超过了它应该运行的时间,它像页面请求一样在 HTTP 上运行,而不是在后台运行。真正的 cron 在 CLI 上运行(取决于你如何调用你的文件),但我建议改用它,除非你绝对需要 wordpress 函数。
标签: php process shared-hosting