我希望有一个简单的PHP脚本循环,每隔十分钟做一次。它会在异地托管,我会通过浏览器激活它。除了我的网络空间,我无法访问服务器,所以“cron”不是一个选项。
(我很高兴在一段时间或一定数量的工作周期之后停止。我只需要在浏览器远离页面脚本后继续运行。)
这样的事情可能吗?感谢。
答案 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(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函数将最大执行时间设置为某个较大的值。