首先,我想向您提供我想要做的基本想法:
我正在努力建立一个免费的网络托管服务为我做一些工作。我创建了一个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分钟后我在浏览器上出现错误“连接已被重置”并且循环停止。
我该怎样做才能让我的循环永远持续下去?
答案 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有适合每个人的东西!
答案 1 :(得分:0)
你可以使用php函数set_time_limit()。
答案 2 :(得分:0)
您不应该从浏览器处理此问题。每分钟运行一次cron进行所需的检查将是一个更好的解决方案。
接下来为什么你会每秒更新一次?只需记下一个时间戳,以便知道何时发出请求?
让一些东西永远运行是不可行的。更重要的是确保您的业务流程继续运行。所以也许将你的商业案例放在这里是明智的,你似乎需要数秒钟并在一分钟内做一些事情,但这并不完全清楚。那你需要做什么?