Last active
August 1, 2016 14:42
-
-
Save maximal/9a95e3f474d7f288ff7708a26816b711 to your computer and use it in GitHub Desktop.
Hosting payment warning script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Скрипт предупреждения об оплате хостинга. | |
* | |
* Запускается, проверяет дату, шлёт письмо с уведомлением, если надо. | |
* Если просрочено, выключает веб-сервисы (поэтому скрипт надо запускать от рута). | |
* | |
* Можно добавить в планировщик крон-задачей (каждый день в полдень, 12:05): | |
* 5 12 * * * root php /full/path/to/hosting-warning.php | |
* | |
* @author MaximAL | |
* @since 2016-08-01 | |
* @date 2016-08-01 | |
* @time 17:07 | |
* @copyright © MaximAL, Sijeko 2016 | |
* @link http://maximals.ru | |
* @link http://sijeko.ru | |
**/ | |
// Кодировка строк | |
mb_internal_encoding('utf-8'); | |
//// Настройки | |
$emailTo = 'client@email.com'; | |
$emailFrom = 'administrator@email.com'; | |
$telegramLink = 'https://telegram.me/AdministratorTelegramName'; | |
$daysMax = 8; | |
$lastDayTime = '2016-08-29T18:00:00'; | |
$timeZone = 'Europe/Moscow'; | |
// Проверяем, чтобы было запущено от рута | |
$user = posix_getpwuid(posix_geteuid()); | |
if ($user['name'] !== 'root') { | |
echo 'Процесс запущен от пользователя `', $user['name'], '`, а должен быть запущен от пользователя `root`.', PHP_EOL; | |
exit(1); | |
} | |
//// Поехали! | |
// Смотрим, сколько осталось | |
$dateTo = new \DateTime($lastDayTime, new \DateTimeZone($timeZone)); | |
$now = new \DateTime('now', new \DateTimeZone($timeZone)); | |
$interval = $now->diff($dateTo); | |
// Если просрочили или количество дней меньше 8 | |
if ($interval->invert || $interval->days < $daysMax) { | |
// Шлём письмо с предупреждением | |
email( | |
$emailTo, | |
'Оплата хостинга' . ($interval->invert ? ' [просрочена]' : (' [осталось дней: ' . $interval->days . ']')), | |
'Оплаченный период хостинга ' . ($interval->invert ? 'истёк ' : 'истекает ') . | |
$dateTo->format('j.m.Y в G:i.') . PHP_EOL . PHP_EOL . | |
'Свяжитесь с администратором (можно просто ответить на это письмо) и оплатите хостинг, пожалуйста.' . | |
PHP_EOL . PHP_EOL . | |
'Емейл: ' . $emailFrom . PHP_EOL . | |
'Телеграм: ' . $telegramLink, | |
$emailFrom | |
); | |
// Если просрочено, вырубаем веб-сервисы | |
if ($interval->invert) { | |
exec('service apache2 stop'); | |
exec('service nginx stop'); | |
} | |
} else { | |
// Всё нормально, удостоверяемся, что веб-сервисы работают | |
exec('service apache2 start'); | |
exec('service nginx start'); | |
} | |
exit(0); | |
/** | |
* Отсылка письма. | |
* | |
* @param string $to Адрес получателя (или адреса получателей) письма | |
* @param string $subject Тема письма | |
* @param string $text Текст письма | |
* @param string $from Адрес отправителя письма | |
* @return bool Возвращает `true`, если письмо было принято к отправке, и `false` в противном случае. | |
*/ | |
function email($to, $subject, $text, $from) | |
{ | |
$headers = []; | |
$headers[] = 'MIME-Version: 1.0'; | |
$headers[] = 'Content-type: text/plain; charset=utf-8'; | |
$headers[] = 'From: ' . $from; | |
$headers[] = 'Subject: ' . $subject; | |
$headers[] = 'X-Mailer: PHP/' . phpversion(); | |
return mail($to, $subject, $text, implode("\r\n", $headers)); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Уведомление хостинга | |
# (c) MaximAL 2016-08-01 | |
MAILTO=administrator@email.com | |
5 12 * * * root php /full/path/to/hosting-warning.php |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment