在PHP内执行cronjob

时间:2020-05-03 02:28:15

标签: php email cron

我怎样才能仅在php文件中运行一次php脚本,一旦用户完成某些操作,该脚本便在其中执行cronjob。我已经设置了交互功能,我需要做的就是在用户执行此特定操作后在cronjob中调用一个php函数。

我想遍历数据库中所有具有特定forgein密钥的用户,并向他们发送电子邮件。

还可以用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;
} 

1 个答案:

答案 0 :(得分:0)

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

如果您想每分钟运行一次PHP脚本,则在大多数标准linux服务器上,其语法应类似于:

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

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

您可以仅使用PHP来“模拟” cronjob,但这并不是很可靠。我见过的一种方法是在服务器上的某个地方(例如http://mywebsite.com/cron/cron.php)托管一个页面,并使用执行运行状况检查的外部服务(例如Pingdom / AWS Route53),它将每隔x分钟可靠地访问该页面。

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

如果要返回页面,然后进行一些后台处理(在上面的伪造cronjob样式中也有用),例如发送电子邮件,则可以使用PHP函数ignore_user_abort来使成功返回消息,然后继续处理请求。如果您希望每30秒运行一次,等等,这也可以用来获取更多的增量cron。

相关问题