【发布时间】:2015-07-22 07:08:06
【问题描述】:
我在这里做错了什么?我错过了while循环在PHP中的工作方式吗?即使在页面关闭后,我也希望它在服务器的后台继续循环。
重要提示:即使我保持页面打开,它也不起作用。
我觉得我在使用 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);
}
大家好,我又回来了!
所以,我想做的代码是:
- 接受用户输入
- 使用用户输入查询数据库
- 每 60 秒通过电子邮件发送结果。
我的解决方案是将最后两个阶段放在一个 while 循环中,然后让脚本在最后休眠 60 秒。
结果:我收到一封包含有用数据的电子邮件。
【问题讨论】:
-
什么是
White循环?或者这是一种绕过可能的欺骗的方法?T与键盘上的L相差甚远。 -
根本不工作,还是跑了一会儿就停了?如果您在共享主机上,则提供商可能有一个脚本来检查长时间运行的脚本并杀死它们
-
你怎么知道它不起作用?
-
安全模式开启了吗? “警告当PHP在安全模式下运行时,此功能无效。除了关闭安全模式或更改php.ini中的时间限制外,没有其他解决方法。” php.net/manual/en/function.set-time-limit.php
-
您想每 10 秒发送一封电子邮件吗?嗯...
标签: php loops while-loop sleep