Зачем автоматизировать рутину на PHP? Или как заставить компьютер работать за вас
Представьте: каждое утро вы входите на сервер, запускаете бекап базы данных, проверяете логи ошибок, генерируете отчёт за вчерашний день и отправляете его начальнику. А потом — ещё раз, и ещё. Скучно? Ещё бы. А главное — глупо тратить время программиста на то, что может сделать машина.
PHP — это не только про веб-сайты. Этот язык отлично подходит для автоматизации задач на PHP: от простого переименования файлов до сложного парсинга сайтов. В этой статье я покажу 10 реальных примеров, которые сэкономят вам часы работы. Все скрипты рабочие, проверенные — берите и используйте.
Кстати, если вы ищете готовые решения для автоматизации с помощью PHP — вы попали по адресу. Поехали!
1. Автоматическая отправка email с вложением (PDF-отчёт)
Самый частый запрос от бизнеса: «Сделай, чтобы отчёты приходили сами». Ниже — простой скрипт, который отправляет письмо с PDF-файлом.
<?php
function sendReportWithAttachment($to, $subject, $body, $filePath) {
$boundary = md5(time());
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: report@mysite.com\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n";
$message = "--{$boundary}\r\n";
$message .= "Content-Type: text/plain; charset=utf-8\r\n\r\n";
$message .= $body . "\r\n\r\n";
if (file_exists($filePath)) {
$content = file_get_contents($filePath);
$content = chunk_split(base64_encode($content));
$message .= "--{$boundary}\r\n";
$message .= "Content-Type: application/pdf; name=\"" . basename($filePath) . "\"\r\n";
$message .= "Content-Disposition: attachment; filename=\"" . basename($filePath) . "\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n\r\n";
$message .= $content . "\r\n";
}
$message .= "--{$boundary}--";
return mail($to, $subject, $message, $headers);
}
// Использование:
sendReportWithAttachment(
'boss@company.com',
'Ежедневный отчёт за ' . date('d.m.Y'),
'Во вложении PDF-отчёт. Подробности в файле.',
'/var/reports/daily_report.pdf'
);
?>
Как автоматизировать: поставьте этот скрипт в cron на выполнение раз в сутки — и отчёты будут улетать сами.
2. Парсинг сайта и сохранение данных в CSV
Допустим, нужно собрать цены конкурентов или список вакансий. Парсинг на PHP — это просто. Используем cURL и DOMDocument.
<?php
function parseSiteToCSV($url, $cssSelector, $outputFile) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
$html = curl_exec($ch);
curl_close($ch);
if (!$html) {
return false;
}
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$items = $xpath->query($cssSelector);
$file = fopen($outputFile, 'w');
fputcsv($file, ['Текст', 'Ссылка']);
foreach ($items as $item) {
$text = trim($item->textContent);
$link = $item->getAttribute('href') ?: '—';
fputcsv($file, [$text, $link]);
}
fclose($file);
return true;
}
// Пример: парсим заголовки новостей с сайта
parseSiteToCSV(
'https://news.ycombinator.com/',
'//tr[@class="athing"]/td[@class="title"]/a',
'hacker_news_titles.csv'
);
?>
Этот пример автоматизации задач на PHP можно запускать раз в час — и получать свежие данные без единого клика.
3. Автоматическое создание резервной копии базы данных MySQL
Забыли сделать бекап? С PHP это больше не проблема. Скрипт ниже создаёт дамп базы и отправляет его в архив.
<?php
function backupDatabase($host, $user, $pass, $dbname, $backupDir = '/backups/') {
$filename = $backupDir . $dbname . '_' . date('Y-m-d_H-i-s') . '.sql.gz';
$command = sprintf(
'mysqldump --host=%s --user=%s --password=%s %s | gzip > %s',
escapeshellarg($host),
escapeshellarg($user),
escapeshellarg($pass),
escapeshellarg($dbname),
escapeshellarg($filename)
);
$output = null;
$returnCode = null;
exec($command, $output, $returnCode);
if ($returnCode === 0) {
echo "Бекап создан: {$filename}\n";
// Удаляем бекапы старше 7 дней
$files = glob($backupDir . $dbname . '_*.sql.gz');
foreach ($files as $file) {
if (filemtime($file) < strtotime('-7 days')) {
unlink($file);
echo "Удалён старый бекап: {$file}\n";
}
}
} else {
echo "Ошибка создания бекапа!\n";
}
}
// Использование:
backupDatabase('localhost', 'root', 'password123', 'my_project');
?>
Почему это круто: скрипт сам чистит старые архивы. Поставьте в cron на каждые 6 часов — и спите спокойно.
4. Обработка изображений: водяной знак и ресайз
Если на сайт загружают фото, их нужно обработать. Скрипты автоматизации PHP с GD-библиотекой сделают это влёт.
<?php
function processImage($sourcePath, $destPath, $maxWidth = 800, $watermarkText = '© MySite') {
$imageInfo = getimagesize($sourcePath);
$mime = $imageInfo['mime'];
switch ($mime) {
case 'image/jpeg': $src = imagecreatefromjpeg($sourcePath); break;
case 'image/png': $src = imagecreatefrompng($sourcePath); break;
case 'image/gif': $src = imagecreatefromgif($sourcePath); break;
default: return false;
}
$origW = imagesx($src);
$origH = imagesy($src);
// Ресайз
if ($origW > $maxWidth) {
$newH = round($origH * ($maxWidth / $origW));
$dst = imagecreatetruecolor($maxWidth, $newH);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $maxWidth, $new