Автоматизация рутины на PHP: 5 мощных скриптов, которые сэкономят часы работы

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Ваш личный ассистент на 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. Давайте нау

Блоги

Рекомендаций по книгам