【问题标题】:PHP - Long running process on shared hosting environmentPHP - 共享主机环境中长时间运行的进程
【发布时间】: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


【解决方案1】:

如果您需要执行需要这么长时间的脚本,我会考虑一个不依赖调用脚本的后台进程。由于您尚未阐明您的申请意图,因此无法为您指明正确的方向。

【讨论】:

  • 如果这就是你的意思,我已经在后台使用 WP cron。我更新了问题,抱歉不够清楚。
  • 我将假设“get_all_games()”函数是超时的原因。
  • 你真的应该分页,因为你遇到的问题只会变得更糟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多