2012-06-30 93 views
1

首先,我想给你的什么,我试图做的基本思想:PHP结束脚本执行全自动

我试图做一个免费的网络托管服务做一些工作对我来说。我创建了一个php页面和MySQL数据库。后面我的PHP页面的基本想法是我有$关机状态while循环和while循环中的一些反跟踪代码是否正在运行或不

<?php 

/* 

Connect to database etc. etc 

*/ 

$shutdown = false; 
// Main loop 
while (!$shutdown) 
{ 
    // Check for user shutdown request 
    $strq = "SELECT * FROM TB_Shutdown;"; 
    $result = mysql_query($strq); 
    $row = mysql_fetch_array($result); 
    if ($row[0] == "true") 
    { 
     $shutdown = true; // I know this statement is useless but nevermind 
     break; 
    } 

    //Increase counter 
    $strq = "SELECT * FROM TB_Counter;"; 
    $result = mysql_query($strq); 
    $row = mysql_fetch_array($result); 

    if (intval($row[0]) == 60) 
    { 
     // Reset counter 
     $strq = "UPDATE TB_Counter SET value = 0"; 
     $result = mysql_query($strq); 

      /* 

     I have some code to do some works at here its not important just curl stuff 

      */ 

    else 
    { 
     // Increase counter 
     $strq = "UPDATE TB_Counter SET value = " . (intval($row[0]) + 1); 
     $result = mysql_query($strq); 
    } 

     /* 

    I have some code to do some works at here its not important just curl stuff 

     */ 

    // Sleep 
    sleep(1); 
} 

?> 

而且我有一个check.php返回我来自TB_Counter的值。

的问题是:我跟踪TB_Counter表中的每一秒。一段时间后停止。如果我关闭了我的浏览器(我在php循环页面中调用了我的主浏览器),它会在2分钟后停止。如果不在5-7分钟后,浏览器和循环停止时出现“连接已重置”的错误。

我应该怎么做才能让我的循环是永恒的?

回答

1

你需要让PHP完全执行。有一个在PHP.INI文件,该文件说,一个选项:

max_execution_time = 30; 

这台以秒为脚本允许它被分析器终止之前运行 的最长时间。这有助于防止写好的脚本不能捆绑服务器。默认设置为30。 当从命令行运行PHP的默认设置为0

功能set_time_limit

设定的秒的脚本允许运行数。如果达到 ,脚本将返回致命错误。默认限制为30秒 或,如果存在的话,在 php.ini中所定义的的max_execution_time值。

要检查是否PHP在安全模式运行,你可以使用这样的:如果它会是一个巨大的过程

echo $phpinfo['PHP Core']['safe_mode'][0] 

,你可以考虑的Cron运行作为一个cronjob。一个小的解释:

Cron是一个非常简单的Linux模块,它允许您在预定的时间或间隔运行命令。在Windows中,它被称为计划任务。 Cron这个名字其实来源于我们从中得到单词年表的单词,这意味着时间的顺序。

使用cron,开发人员可以自动完成任务,例如邮寄E锌可能关闭小时的过程中更好地发送,自动更新统计信息或动态源静态页面的再生。系统管理员和Web主机可能希望在其客户端上生成配额报告,完成自动信用卡帐单或类似任务。克朗拥有适合每个人的东西!

Read more about Cron

+0

好吧我试图设置它 set_time_limit(0);但它不起作用。也许服务器不允许我设置时间限制?在设置它来检查我是否被允许进行更改后,是否有办法获取time_limit? – user1492948

+0

是的,现在尝试运行脚本,有什么区别? –

+0

看到我的编辑对不起! – user1492948

0

你可以使用PHP函数set_time_limit()函数。

+0

我真正尝试过 //设置时间 的set_time_limit(0); 但没有奏效。它仍然停止 – user1492948

+0

服务器管理员通过在安全模式下运行php来禁用此功能是可能的,也是可能的。请用phpinfo()验证。 –

0

你不应该从浏览器处理这个问题。每分钟运行一次cron,检查你需要的是一个更好的解决方案。

接下来,为什么你会更新每一秒?只需写下一个时间戳,以便知道何时发出请求?

让东西永远运行是不可行的。更重要的是确保您的业务流程持续运行。因此,将您的商业案例放在这里可能是明智的做法,您似乎需要在一分钟内计算几秒钟并做些事情,但这并不完全清楚。那么你需要做什么?

+0

好吧我从来没有听说过“cron ”。将期待它谢谢! – user1492948

+0

为了给你一个启动,在Linux机器上输入crontab -l,它会给你一个现有的cronjob列表。可能没有。你输入这个例如一个SSH会话,所以终端。然后输入crontab -e,这将允许您编辑cron。它是特定时间的任务清单,例如每分钟。如果是PHP,则必须使文件可执行,例如chmod 0755(检查权限!),并且必须在文件的开头添加一个PHP路径,如/ usr/bin/php。检查您的环境的路径。 –

+0

好的问题是我试图做这个免费的作品。有很多免费的网络托管服务,但我不知道如何输入这些命令到他们的Linux机器?哈哈我认为我需要为此拥有一个VPS?不是吗? – user1492948