PHP 长脚本 - “中止”状态

Posted

技术标签:

【中文标题】PHP 长脚本 - “中止”状态【英文标题】:PHP long script - "Aborted" status 【发布时间】:2015-02-19 22:45:23 【问题描述】:

我有一个连接到 SFTP 服务器的 php 脚本,从特定目录下载文件(书籍封面),将图像复制到我的服务器并更新数据库中有关书籍的信息(设置封面图像的路径)。

为了使用 SFTP,我使用 Net_SFTP 类。

当我为包含大约 7000 个图像的 SFTP 服务器运行此脚本时,最终我收到“已中止”状态。将近 10-14 分钟的执行脚本停止后。

我在站点日志文件中找不到任何错误消息(我们在其中写入所有警告、严重错误等)。我的问题是在哪个文件中可以找到提及此错误的内容?脚本是否有可能在没有将详细信息写入任何日志文件的情况下被中止?我们在 CentOS 上有 Apache。

附:已经将“max_execution_time”参数增加到 3600。没有帮助。

UPD

我试过了

set_time_limit(0);
ignore_user_abort(true);
ini_set('max_execution_time', 0);

在脚本的开头。没有运气。

UPD 2

我并不总是看到“中止”状态。通常浏览器会在服务器上的脚本已经停止(中止?)时显示加载指示器。任何想法为什么会发生?

【问题讨论】:

【参考方案1】:

使用

set_time_limit(0);

在脚本的顶部,这样脚本将永远运行 - 但是不建议这样做,并且您的网络服务器可能会通过强制 HTTP 超时(通常大约 5 分钟)将您赶出。

您应该查看您的网络服务器指南以获取有关 HTTP 超时的更多信息。

【讨论】:

感谢您的回答。好的,所以如果是超时问题,我可以在哪里找到有关它的错误详细信息?在哪些日志文件中? 你可以在你的代码中使用error_reporting(E_ALL);通常你会看到一个超时消息 已尝试 error_reporting(E_ALL) - 在 apache 日志或站点日志中仍然没有看到任何错误消息。 @Tamara 你有预付款吗? 是的,我发现了问题所在。显然脚本没有中止,它进入了无限循环,这就是我在浏览器中看到加载指示器的原因。我不确定为什么我多次看到“中止”状态...更多详细信息可以在这里找到***.com/questions/28639927/…感谢您对我的问题感兴趣

以上是关于PHP 长脚本 - “中止”状态的主要内容,如果未能解决你的问题,请参考以下文章

火车:我可以重置任务的状态吗? (从“中止”回到“正在运行”)

Laravel 5.2 在中止时将 Http 响应状态码设置为 403

Ruby on Rails。捆绑器。黄瓜。耙中止!命令失败,状态为 (1)

ARM 异步外部中止

PHP设计模式——状态模式

中止多文件上传 AJAX 请求