PHP休眠无限While循环
我做错了什么?我是否错过了while循环在PHP中的工作方式?我希望它在服务器上的后台保持循环,即使在页面关闭之后也是如此PHP休眠无限While循环,php,loops,while-loop,sleep,Php,Loops,While Loop,Sleep,我做错了什么?我是否错过了while循环在PHP中的工作方式?我希望它在服务器上的后台保持循环,即使在页面关闭之后也是如此 $querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'"; 重要提示:即使我保持页面打开,也不起作用。 $querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'"; 我觉得我在使用PHP时犯了一个明显的语法
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
重要提示:即使我保持页面打开,也不起作用。
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
我觉得我在使用PHP时犯了一个明显的语法错误
ignore_user_abort(true);
set_time_limit(0);
while(1){
$dbConnection = mysqli_connect($servername, $username, $password, $dbname);
$query = "SELECT user_id FROM users WHERE email = '$user_email'";
$id = mysqli_query($dbConnection, $query);
$idrow = mysqli_fetch_assoc($id);
$result = $idrow['user_id'];
$querydata1 = "SELECT data1 FROM queue WHERE user_id = '$result'";
$data1 = mysqli_query($dbConnection, $querydata1);
$data1row = mysqli_fetch_assoc($data1);
$resultdata1 = $data1row['data1'];
if($resultdata1 != NULL){
$querydata2 = "SELECT data2 FROM queue WHERE user_id = '$result'";
$data2 = mysqli_query($dbConnection, $querydata2);
$data2row = mysqli_fetch_assoc($data2);
$resultdata2 = $data2row['data2'];
include 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.mandrillapp.com';
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = 'test@test.com';
$mail->FromName = 'test';
$mail->addAddress($user_email);
$mail->Subject = 'Test';
$mail->Body = "$resultdata2";
$mail->send();
} else {
break;
}
time_sleep_until(microtime(true)+10);
}
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
嘿,伙计们,我又回来了
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
因此,我想编写代码的目的是:
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
结果:我收到一封电子邮件,里面有有用的数据。大多数服务器对php脚本的执行都有时间限制。在大多数情况下,脚本在超时之前只运行30秒。如果您有权访问服务器配置,可以将其更改为无限
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
Set\u time\u limit(0)
有时不起作用,具体取决于服务器配置。不久前,我尝试了同样的事情,但什么也没有做,但改变了服务器的设置,我做到了这一点
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
编辑
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
由于抱怨更改服务器上的默认设置可能会造成安全风险,您可以采取其他措施。查看您的评论,您想查询数据,然后通过电子邮件表示提及数据
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
通过创建一个独立的php脚本(而不是while循环),只需遵循一次逻辑,就可以很容易地做到这一点。使用Jquery,您可以在加载网页时根据需要多次调用此脚本
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
要使此脚本在后台运行而无需用户交互,您需要创建一个cronjob,该cronjob每隔一段时间调用此脚本(您可以定义时间间隔)。问题在于您使用了
break
。当队列中没有数据时,发出中断。这将关闭循环,从而结束脚本的执行
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
continue
在这里继续循环的下一个迭代是合乎逻辑的,但这也会跳过循环底部的休眠。因此,我认为在循环的末尾不需要else{}
块。只要让它点击sleep部分,如果数据为NULL,则继续正常循环即可
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
请注意,为什么不只对以下各项进行一次查询:
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";
为了得到两个不同的列,用相同的参数背靠背地进行两个查询似乎是多余的。什么是
White
循环?或者这是一种避开可能的欺骗的方法?那T
与键盘上的L
相去甚远。它根本不工作,或者它运行了一段时间后就停止了?如果您使用的是共享主机,则提供商可能有一个脚本,用于检查长时间运行的脚本并将其杀死。您如何知道它不起作用?安全模式是否启用?“警告当PHP在安全模式下运行时,此函数无效。除了关闭安全模式或更改PHP.ini中的时间限制外,没有其他解决方法。”是否每10秒发送一封电子邮件?你确实看到了set\u time\u limit(0)代码>在问题中?@arkascha有时该功能根据服务器配置不起作用。不久前,我尝试了同样的方法,但什么也没做,但更改服务器的设置对我来说是可行的。然后你应该在回答中写下这一点。特别是你提到要用管理权来改变某些东西。通常,在php配置中更改这一点将是一个巨大的安全问题。这真是个糟糕的建议。如果您有管理权限,那么您应该建议如何更改配置,以使此命令生效。让我们看看OP有什么要说的。希望他们一开始就公布了完整的代码。弗雷德,快点,停下来。我只是想寻求一点帮助。你太不受欢迎了。@Devon,我拿走了else{}块,它仍然不工作,奇怪。@gregjw,它会发送第一封电子邮件吗?执行是否在10秒或更长时间后停止?@gregjw Fred是对的。我可能超越了其他人在Stackoverflow的预期。对于脚本,添加一些调试参数,echo跟踪循环的运行次数,查看最后一次输出以了解循环何时退出,确保有错误报告(E_ALL)并显示错误。
$querydata = "SELECT data1,data2 FROM queue WHERE user_id = '$result'";