2013-04-25 99 views
0

我写了一个脚本,从数据库中导出数据,然后把它放到XML文件。脚本在无限while循环中运行,并带有适当的break语句(任务完成后)。任务需要10分钟。当我发起http请求开始一项工作时,我正在使用的浏览器完全冻结 - 不仅请求了URL,而且还请求了整个主机。在与其他浏览器同时,我可以浏览包含我的脚本的网页。运行脚本后,浏览器挂起。其他浏览器的工作

摘录我的PHP脚本:

while(true) 
{ 
    if($i === $z) 
    { 
     break; 
    } 

    foreach((array)$this->project as $project) 
    { 
     makeYourJob(); 
     usleep(1000000); 
     $z++; 
    } 
    usleep(2000000); 
} 

脚本与这个jQuery代码中调用(HTML网页,其中包含此代码的I型地址):

$.get("cron.php"); 

我也试着键入的cron URL栏和浏览器中的.php也会挂起。为什么运行脚本的浏览器会冻结?如何避免这种情况?

编辑: 由ajax或用户做一个简单的获取/发布请求不会解决问题。这篇文章不是重复的。这里有一个解决方案:

exec("wget http://www.domain.com/scrip_name.php > /dev/null &"); 
+1

为什么你使用while(true)而不是像while($ i!== $ z)那样的东西? – 2013-04-25 13:58:32

+0

'while(true)' - theres你的问题。 – Nick 2013-04-25 13:58:42

+0

为什么不把它作为控制面板上的实际cron脚本运行,并取消了超时设置,以便cron浏览器(如果使用wget)能够运行它而不是自己的浏览器? – 2013-04-25 14:00:39

回答

0

很明显,打破死循环的if语句没有被调用。

你可以检查$ i和$ z的初始值吗?另外,===检查2个变量是否具有相同的值和相同的值。我建议你检查$ i和$ z变量的类型。

+0

这只是一个片段。 $ i是int并被设置为0.如果语句确实已达到。 – 2013-04-25 14:03:31