PHP set_time_limit和延迟的奇怪行为

时间:2013-05-24 22:55:02

标签: php delay usleep

你好经验丰富的人,我在一台服务器上写的一个PHP脚本遇到了一个非常奇怪的问题,在本地工作站里,一切都像魅力一样。

基本上我写了这个脚本用于报废,我有N页要废弃,但在示例中我只是以20为例,我也正在删除报废过程(这工作正常,问题在于下面的代码),在每次迭代之后我们需要M毫秒的延迟*强制性(这是为了避免禁止的可能性,服务器禁止来自同一IP的非常快的请求),在下面的代码中我把10000毫秒我正在使用那个睡着了。我知道我可以使用sleep函数,但客户端想以毫秒为单位输入。

报废很好,问题是当我执行下面的代码时,服务器永远不会成功完成,我从未看到“状态:脚本已完成”。消息,执行持续大约3分18秒,然后脚本突然停止,没有错误消息,没有错误日志,没有...我只收到“开始...”消息。这是代码:

<?php

error_reporting(E_ALL);
ini_set("display_errors", "On");
ini_set("display_startup_errors", "On");

function Start() {
    $lim = 20;
    for ($i = 0; $i < $lim; $i++) {
        usleep(10000 * 1000); //usleep need microseconds, in other words the delay is 10 seconds
        // scrapping process here
    }
    echo "Status: The script has finished.";
}

echo "starting... ";
Start();

当$ lim = 20时,执行持续3分18秒,然后脚本停止没有任何错误,这个延迟是错误的应该是200秒或3分20秒,在最后一次延迟中发生了什么。

使用$ lim = 7,执行持续64秒,之后脚本会再次停止而不会出现任何错误。正确的延迟应该是70秒。

很明显,上次延迟会发生一些事情,

我有这个配置的php.ini: 的max_execution_time = 0 另外,我使用了set_time_limit(0);在PHP脚本中。 即使我做了

echo ini_get("max_execution_time");

打印0 所以,我不是max_execution_time的问题,它应该是其他的。我错过了其他一些配置吗?

我在所有这些网络浏览器中测试过,firefox 21,chrome 27,safari 5,我只收到“开始”消息。在konqueror Web浏览器中,我收到此消息“连接到服务器意外关闭”。

如果您遇到类似的事情,请告诉我,您的支持对我非常有用。

问候。

0 个答案:

没有答案