在php中执行cronjob



如何在php文件中只运行一次php脚本,在用户完成某个操作后,它会执行cronjob。我已经设置好了交互,我所需要做的就是在用户执行此特定操作后,在cronjob中调用php函数。

我想循环浏览我数据库中的所有用户,并向他们发送一封电子邮件。

此外,是否可以用PHP 编写cronjob

我的代码如下。

$i = 0;
$queryResult = mysqli_query($conn, $sql_query);
while($i<mysqli_num_rows($queryResult) ) {
$inf_info = mysqli_fetch_assoc($queryResult);
$brand = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM brands WHERE id = '$brand_id'"));
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->Username = 'crowdfluenceapp@gmail.com';
$mail->Password = 'qtDa5LOM';
$mail->SMTPSecure = "ssl";
$mail->Port = 465;
$mail->SetFrom(EMAIL_USERNAME, "Crowdfluence Support");
$mail->addAddress($inf_info['email'], $inf_info['first_name'] . " " . $inf_info['last_name']);
$mail->Subject = "Your insider brand has started an internal campaign!";
$mail->isHTML();
$mail->Body = "
Greetings influencer! We want to let you know that that your insider brand, " . $brand['name'] . ",<br><br>
Has started a new insider campaign.<br><br>
If you wish to not participate, simply ignore this email.<br><br>
Sincerely,<br><br>
The Crowdfluence Team
";
// Check if email was sent successfully
if ($mail->send()){
unset($mail);
}else{
unset($mail);
}
$i +=1;
} 

您可以通过普通的Linux cronjob运行PHP脚本。

如果你想每分钟运行一个PHP脚本,在大多数标准的linux服务器上,语法应该是这样的:

* * * * * php /var/www/script/myscript.php

如果你正在使用一些共享托管提供商,并且无法访问运行PHP的服务器/容器,你可能会在cpanel/webmin等中找到cronjob支持。

您可以只使用PHP"模拟"cronjob,但它不是很可靠。我看到的一种方法是在服务器上的某个地方托管一个页面,比如http://mywebsite.com/cron/cron.php,并使用进行健康检查的外部服务,如Pindom/AWS Route53,它将可靠地每x分钟访问一次页面。

如果只是想防止脚本过于频繁地运行,可以在脚本运行时向数据库或文件写入时间戳,并检查自上次运行脚本以来是否已经过了足够的秒数。

如果你想返回一个页面,然后进行一些后台处理(在上面的假cronjob样式中也很有用(,比如发送电子邮件,你可以使用PHP函数ignore_user_abort让返回一条成功消息,然后继续处理请求。如果你想每30秒运行一次,这也可以用来获得更多的增量cron,等等。

最新更新