Ваш личный ассистент на PHP: почему автоматизация — это суперсила
Представьте утро понедельника. Вы приходите в офис, открываете ноутбук, а вся рутина уже сделана: бэкапы залиты на сервер, клиентам разосланы напоминания, а вчерашние CSV-отчеты уже обработаны и красиво упакованы в PDF. Звучит как фантастика? А вот и нет.
Большинство разработчиков на PHP (да и не только) тратят до 30% рабочего времени на однотипные, повторяющиеся задачи. Автоматизация на PHP — это не магия, а грамотное использование встроенных функций и пары библиотек. Сегодня я покажу вам 5 реальных скриптов, которые вы сможете запустить уже через 10 минут после прочтения этой статьи.
Кстати, если вам интересна автоматизация на Python — у нас на PythonLib есть отличные материалы. Но сегодня мы говорим про PHP, потому что он всё ещё правит балом на серверной стороне (до 77% сайтов работают на нём).
1. Автоматическая очистка и архивация старых логов
Логи растут как снежный ком. Ещё вчера файл error.log весил 50 МБ, а сегодня уже 500. Ручная чистка — это боль. Давайте напишем PHP скрипт для автоматизации этой задачи.
Скрипт: LogRotator
<?php
class LogRotator {
private string $logDir;
private string $archiveDir;
private int $maxFileAgeDays;
public function __construct(string $logDir, string $archiveDir, int $maxFileAgeDays = 30) {
$this->logDir = rtrim($logDir, '/');
$this->archiveDir = rtrim($archiveDir, '/');
$this->maxFileAgeDays = $maxFileAgeDays;
}
public function rotate(): void {
if (!is_dir($this->archiveDir)) {
mkdir($this->archiveDir, 0755, true);
}
$files = glob($this->logDir . '/*.log');
foreach ($files as $file) {
$fileAge = time() - filemtime($file);
if ($fileAge > $this->maxFileAgeDays * 86400) {
$archiveName = $this->archiveDir . '/' . basename($file) . '.' . date('Ymd') . '.gz';
$gzData = gzencode(file_get_contents($file), 9);
file_put_contents($archiveName, $gzData);
unlink($file);
echo "Архивирован: " . basename($file) . PHP_EOL;
}
}
}
}
// Использование:
$rotator = new LogRotator('/var/log/myapp', '/backup/logs/archive');
$rotator->rotate();
?>
Этот скрипт автоматизации PHP делает три вещи: находит файлы старше 30 дней, сжимает их в GZIP и перемещает в архив. Запускайте его по CRON раз в неделю — и забудьте про «диск переполнен».
2. Массовая рассылка персонализированных email-уведомлений
Допустим, у вас интернет-магазин. Клиент оформил заказ, и ему нужно отправить письмо с деталями. Вручную это делать глупо. Автоматизация задач на PHP с использованием встроенной функции mail() или PHPMailer решит проблему.
Пример: рассылка напоминаний о брошенных корзинах
<?php
function sendAbandonedCartReminder(string $email, string $customerName, array $items): bool {
$subject = "Вы забыли корзину, $customerName! 🛒";
$message = "<h2>Привет, $customerName!</h2>";
$message .= "<p>Вы оставили эти товары:</p><ul>";
foreach ($items as $item) {
$message .= "<li>{$item['name']} - {$item['price']} руб.</li>";
}
$message .= "</ul><p><a href='https://yourshop.com/cart'>Вернуться к корзине</a></p>";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "From: shop@yourshop.com\r\n";
return mail($email, $subject, $message, $headers);
}
// Массовая рассылка:
$customers = [
['email' => 'ivan@example.com', 'name' => 'Иван', 'items' => [...]],
['email' => 'olga@example.com', 'name' => 'Ольга', 'items' => [...]]
];
foreach ($customers as $customer) {
sendAbandonedCartReminder($customer['email'], $customer['name'], $customer['items']);
sleep(1); // задержка, чтобы не спамить
}
?>
Важно: для продакшена используйте PHPMailer или SwiftMailer — они корректно работают с SMTP-авторизацией и не попадают в спам.
3. Парсинг и обработка CSV-файлов из почты
Бухгалтерия каждый день присылает CSV с платежами. Раньше вы открывали Excel и делали сводку вручную. Теперь автоматизация рутины на PHP сделает это за секунду.
Скрипт: CSV-конвертер в отчёт
<?php
function processPaymentsCSV(string $csvFile): array {
if (!file_exists($csvFile)) {
throw new Exception("Файл $csvFile не найден");
}
$handle = fopen($csvFile, 'r');
$headers = fgetcsv($handle, 0, ';'); // читаем заголовки
$result = [
'total_sum' => 0,
'transactions' => [],
'errors' => []
];
while (($row = fgetcsv($handle, 0, ';')) !== false) {
// Пропускаем пустые строки
if (empty(array_filter($row))) continue;
$data = array_combine($headers, $row);
// Валидация
if (!is_numeric($data['sum'])) {
$result['errors'][] = "Строка " . (count($result['transactions']) + 2) . ": неверная сумма";
continue;
}
$result['transactions'][] = $data;
$result['total_sum'] += (float) $data['sum'];
}
fclose($handle);
return $result;
}
// Использование:
$report = processPaymentsCSV('/incoming/payments_2024.csv');
echo "Всего транзакций: " . count($report['transactions']) . PHP_EOL;
echo "Общая сумма: " . $report['total_sum'] . " руб." . PHP_EOL;
?>
Добавьте интеграцию с IMAP (через imap_open), чтобы скрипт сам забирал вложения из почты — и получите полностью автоматизированную обработку документов.
4. Генерация PDF-отчётов с графиками
Клиенты любят PDF. Менеджеры любят PDF. Начальство обожает PDF. Давайте нау