1

首先,我想向您介绍我正在尝试做的事情的基本概念:

我正在尝试让免费的网络托管服务为我做一些工作。我创建了一个 php 页面和 MySQL 数据库。我的 PHP 页面背后的基本思想是我有一个条件为 $shutdown 的 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 表。它会在一段时间后停止。如果我关闭我的网络浏览器(我称之为我的 main while php 循环页面),它会在大约 2 分钟后停止。如果不是在 5-7 分钟后,我会在浏览器上收到错误“连接已重置”并且循环停止。

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

4

3 回答 3

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 这个名字实际上来源于我们得到单词 chronology 的同一个词,这意味着时间的顺序。

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

阅读有关 Cron 的更多信息

于 2012-06-30T12:16:36.787 回答
0

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

于 2012-06-30T12:16:17.217 回答
0

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

接下来为什么要每秒更新一次?只需写下时间戳,以便您知道何时提出请求?

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

于 2012-06-30T12:19:29.100 回答