php - PHP - 共享主机环境中长时间运行的进程
问题描述
我有一个我无法解决的问题。我正在开发一个脚本,并且我有一个长时间运行的过程,简而言之,我正在从外部 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 分钟后返回数据,这些数据将馈送到数据库。希望能澄清一点,很抱歉造成混乱,我在其中一些事情上还是一个初学者。
解决方案
如果您需要执行需要这么长时间的脚本,我会考虑一个不依赖调用脚本的后台进程。由于您尚未阐明您的申请意图,因此无法为您指明正确的方向。
推荐阅读
- json - 有没有办法区分空值和没有键?
- ios - 是否有来自 Firebase Cloud Messaging 的回调以指示已收到消息?
- javascript - 找不到 url 时在地址栏中维护 url
- python - 比较并从两个数据框中删除重复项
- html - 如何使我的背景图像适合手机尺寸?
- azure-devops - 在 Azure Devops 中构建一个通用工件,并在发布时根据不同的环境注入某些变量
- aem - AEM - 如何在 OSGi 组件中检索 model-json
- regex - 在 htaccess 中删除 php 扩展会返回内部服务器错误 (500)
- javascript - 下载图像时在 html2canvas 中忽略不透明度值
- azure - 为什么我使用 Azure 服务管理 API 得到 403?