PHP循环超出浏览器断开连接?

时间:2010-02-27 12:34:16

标签: php

我希望有一个简单的PHP脚本循环,每隔十分钟做一次。它会在异地托管,我会通过浏览器激活它。除了我的网络空间,我无法访问服务器,所以“cron”不是一个选项。

(我很高兴在一段时间或一定数量的工作周期之后停止。我只需要在浏览器远离页面脚本后继续运行。)

这样的事情可能吗?感谢。

6 个答案:

答案 0 :(得分:1)

有可能,请参阅ignore_user_abort()

set_time_limit(0);
ignore_user_abort(true);

while (true) // forever
{
    // your code
}

您可以将这两项功能结合使用sleep()usleep()time_nanosleep()甚至更好 - time_sleep_until()来实现类似CRON的效果。

答案 1 :(得分:0)

PHP脚本在一段时间后超时 - 它们不是为长时间运行的程序而设计的。你必须找到一些方法来每十分钟刺激一次。

查看set_time_limit

这是来自上面的页面:

  

你可以做set_time_limit(0);因此脚本将永远运行 - 但是不建议这样做,并且您的Web服务器可能会通过强制HTTP超时(通常大约5分钟)来阻止您。

答案 2 :(得分:0)

也许您可以在有权访问的计算机上编写另一个脚本,然后定期让该脚本请求另一个脚本。

答案 3 :(得分:0)

Yop可以查看pnctl_fork

答案 4 :(得分:0)

这是你的问题的黑客攻击:

// Anything before disconnecting, but nothing to be output to the client!
ob_end_clean();
header('Connection: close');
ob_start();
// Here you can output anything before disconnecting
echo "Bla bla bla";
$outsize = ob_get_length();
header('Content-Length: '.$outsize);
ob_end_flush();
flush();
// Do your background processing here
// and feel free to quit anytime you want.

答案 5 :(得分:0)

执行此操作的方法可能是从网页启动新的php进程,例如

<?php

exec("php script_that_runs_for_a_while.php > /dev/null");

?>

添加/ dev / null意味着(在Linux系统上)脚本将完成,而不是等待执行完成。

然后,启动的脚本可以执行任何喜欢的操作,因为它基本上只是在服务器上运行的新进程。

请注意,在长时间运行的脚本开始时,您需要使用set_time_limit函数将最大执行时间设置为某个较大的值。

相关问题