Як на PHP створювати скріншоти сайтів?
А PHP таки вміє створювати скріншоти сайтів - правда тільки локально, тому що є можливість підключатись до Вашого браузера.
І найголовніше це кількість коду який потрібно написати! А не потрібно нічого все вже готово під капотом!
Ось мій зразок для тестування:
<?php
header('Content-Type: text/html; charset=utf-8');
// 1. ПЕРЕВІРКА ШЛЯХУ (Спробуйте обидва варіанти, якщо один не підходить)
$chromePath = 'C:\Program Files\Google\Chrome\Application\chrome.exe';
// $chromePath = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe';
echo "<h3>Діагностика оточення:</h3>";
// Перевірка 1: Чи існує файл Chrome
if (file_exists($chromePath)) {
echo "✅ Chrome знайдено за шляхом: $chromePath <br>";
} else {
echo "❌ <b>Помилка:</b> Chrome НЕ знайдено. Перевірте шлях! <br>";
}
// Перевірка 2: Чи дозволено запис у поточну папку
if (is_writable(__DIR__)) {
echo "✅ Папка доступна для запису. <br>";
} else {
echo "❌ <b>Помилка:</b> PHP не має прав на запис у " . __DIR__ . "<br>";
}
// Перевірка 3: Чи увімкнена функція exec
if (function_exists('exec')) {
echo "✅ Функція exec() доступна. <br>";
} else {
echo "❌ <b>Помилка:</b> exec() заблокована в php.ini (disable_functions). <br>";
}
echo "<hr>";
// 2. ЗАПУСК ТЕСТУ
$url = 'https://lyuboshchi.com.ua/';
$outputImage = str_replace('\\', '/', __DIR__) . '/test_screenshot.png';
// Додаємо бюджет часу та відключаємо перевірку сертифікатів (про всяк випадок)
$command = "\"$chromePath\" "
. "--headless=new " // Новий режим headless (більш стабільний)
. "--disable-gpu "
. "--no-sandbox "
. "--incognito " // Не зберігаємо куки та кеш
. "--run-all-compositor-stages-before-draw "
. "--virtual-time-budget=5000 " // Чекаємо завантаження JS/ресурсів
. "--hide-scrollbars "
. "--ignore-certificate-errors "
. "--screenshot=\"$outputImage\" "
. "--window-size=1480,1080 "
. "--user-agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36\" "
. "--lang=uk-UA "
. "\"$url\" 2>&1";
echo "<b>Запуск оновленої команди...</b><br>";
exec($command, $output, $returnCode);
// Обов'язково очищуємо кеш стану файлів, щоб PHP побачив новий файл відразу
clearstatcache();
if (file_exists($outputImage)) {
echo "<h3>УРА! Файл створено!</h3>";
echo "<img src='test_screenshot.png?t=" . time() . "' style='width:100%; border:2px solid red;'>";
} else {
echo "<h3>Файлу все ще немає :(</h3>";
echo "Спробуйте відкрити папку <b>C:\OSPanel\home\ticapack.local\</b> вручну. Чи є там файл?";
}
?>
На локалці працює просто бомба....