PHP结束脚本自动执行

时间:2012-06-30 12:13:27

标签: php mysql

首先,我想向您提供我想要做的基本想法:

我正在努力建立一个免费的网络托管服务为我做一些工作。我创建了一个php页面和MySQL数据库。我的PHP页面背后的基本思想是我有一个带有$ shutdown的条件的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表。它会在一段时间后停止。如果我关闭我的webbrowser(我从php循环页面调用我的主要),它会在2分钟后停止。如果不是在5-7分钟后我在浏览器上出现错误“连接已被重置”并且循环停止。

我该怎样做才能让我的循环永远持续下去?

3 个答案:

答案 0 :(得分:1)

您需要允许PHP完全执行。 PHP.INI文件中有一个选项说明:

max_execution_time = 30;
  

设置允许脚本运行的最长时间(以秒为单位)   在它被解析器终止之前。这有助于防止不良   从捆绑服务器编写脚本。默认设置为30。   从命令行运行PHP时,默认设置为0。

函数set_time_limit

  

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

要检查PHP是否在安全模式下运行,您可以使用:

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

如果它将是一个巨大的过程,你可以考虑在Cron上运行CronJob。对它的一个小解释:

  

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

     

使用Cron,开发人员可以自动执行诸如邮寄电子邮件等任务,这些电子邮件可能在非工作时间内更好地发送,自动更新统计信息或从动态源重新生成静态页面。系统管理员和Web主机可能希望在其客户端上生成配额报告,完成自动信用卡计费或类似任务。 Cron有适合每个人的东西!

Read more about Cron

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您不应该从浏览器处理此问题。每分钟运行一次cron进行所需的检查将是一个更好的解决方案。

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

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