Выполнить cronjob внутри php - PullRequest
0 голосов
/ 03 мая 2020

Как я могу запустить скрипт php только один раз в файле php, где он выполняет cronjob, когда пользователь выполняет определенное действие. У меня уже настроены взаимодействия, все, что мне нужно сделать, - это вызвать функцию php в cronjob после того, как пользователь выполнит это определенное действие.

Я хочу, чтобы l oop прошел через всех пользователей в моей базе данных с определенным поддельным ключом, прикрепленным к ним, и отправил им электронное письмо.

Также возможно ли иметь cronjob, записанный в PHP

Мой код выглядит следующим образом.

$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 голосов
/ 03 мая 2020

Вы можете запускать PHP сценарии с помощью обычного Linux cronjob.

Если вы хотите запускать сценарий PHP каждую минуту, на большинстве стандартных linux серверов синтаксис будет выглядеть примерно так:

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

Если вы пользуетесь услугами какого-либо хостинг-провайдера и не имеете доступа к серверу / контейнеру, на котором работает PHP, вы можете найти поддержку cronjob в cpanel / webmin et c .

Вы можете «эмулировать» cronjob, используя только PHP, но это не очень надежно. Один из способов сделать это - разместить страницу где-нибудь на вашем сервере, скажем, http://mywebsite.com/cron/cron.php, и использовать внешнюю службу, которая выполняет проверки работоспособности, например Pingdom / AWS Route53, которая надежно ударит страница каждые x минут.

Если вы просто хотите предотвратить слишком частое выполнение сценария, вы можете записать отметку времени в базу данных или файл при запуске сценария и проверить, прошло ли достаточно секунд с момента последнего время выполнения сценария.

Если вы хотите, чтобы страница возвращалась, а затем выполняли некоторую фоновую обработку (также полезную в вышеупомянутых стилях поддельного кроншоба), например отправку электронной почты, вы можете использовать функцию PHP ignore_user_abort , чтобы разрешить возврат сообщения об успешном завершении, а затем продолжить обработку запросов. Это также может быть использовано для получения дополнительных инкрементов, если вы хотите, чтобы что-то запускалось каждые 30 секунд, и т. Д. c.

...