« Search Thumbs Add-on - Скриншоты сайтов в поисковикахJavascript - Всплывающие тамбшоты »

PHP скрипт для показа скриншотов

Этот скрипт позволяет показывать скриншоты сайтов без раскрытия персонального ключа пользователя. Кроме того скрипт кеширует скриншоты на вашем сервере, значительно снижая число обращений с сервису и ускоряя загрузку страниц вашего сайта.

Скрипт состоит из двух файлов:
index.php - файл вызова скриншотов, задает параметры показа и кеширования;
_thumbshots.class.php - универсальный PHP5 класс для работы с сервисом;

Hастройка

В файле index.php достаточно комментариев, вы можете изменять любые предустановленные параметры класса $Thumbshot. Для работы скрипта обязательно введите ваш персональный ключ, полученный после регистрации в системе.

Универсальный PHP5 класс _thumbshots.class.php доступен для скачивания только зарегистрированным пользователям. В этом скрипте используется тот же класс что и в плагинах для блогов и CMS.

<?php
if( !empty($_GET['url']) )
{
    
$w 320;    // ширина
    
$h 240;    // высота

    // При необходимости берем размер скриншота из запроса
    // if( !empty($_GET['w']) ) $w = $_GET['w'];
    // if( !empty($_GET['h']) ) $h = $_GET['h'];

    // Показываем JPEG картинку и выходим
    
echo get_image$_GET['url'], $w$h );
}


function 
get_image$url$w false$h false )
{
    global 
$Thumbshot;

    if( empty(
$url) ) return;

    if( empty(
$Thumbshot) )
    {    
// Initialize Thumbshot class and set defaults

        
define('THUMBSHOT_INIT'true);
        require_once 
dirname(__FILE__).'/_thumbshots.class.php';

        
$Thumbshot = new Thumbshot();

        
// Без этого работать не будет!
        
$Thumbshot->return_binary_image true;

        
// Персональный ключ пользователя
        
$Thumbshot->access_key 'ABABABABABABABABABABABABABABABABABA';

        
// Размер скриншота, запрашиваемого с сервера (согласно вашему тарифу)
        
$Thumbshot->original_image_size 'L'// 320x240
        // $Thumbshot->original_image_w = 640;
        // $Thumbshot->original_image_h = 480;

        // Полезно при тестировании и отладке
        
$Thumbshot->debug 0;
        
$Thumbshot->debug_IP 'ВАШ IP';

        
$ReqHost '';
        if( !empty(
$_SERVER['HTTP_HOST']) )
        {    
// Пытаемся автоматически определить хост
            
$ReqHost = ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] != 'off')) ? 'https://' 'http://').$_SERVER['HTTP_HOST'];
        }

        
// URL и путь к папке с кешем (меняем на собственные при необходимости)
        
$Thumbshot->thumbnails_url $ReqHost.'/thumbs/cache/';
        
$Thumbshot->thumbnails_path dirname(__FILE__).'/cache/';

        
// Сколько дней хранить кеш скриншотов
        
$Thumbshot->cache_days 7;            // статус: OK
        
$Thumbshot->err_cache_days 2;        // статус: Ошибка
        
$Thumbshot->queued_cache_days 0;    // статус: Добавлен в очередь

        // Добавляем параметры запроса
        // $Thumbshot->args = array( 'v' => 1, 'lang' => 'en' );

        // Используем собственные заглушки
        /*
        $Thumbshot->service_images = array(
                'all'    => 'URL адрес картинки-заглушки, только JPEG!',
                '0x0'    => 'http://domain.tld/image-queued.jpg',    // Добавлен в очередь
            );
        */

        
$GLOBALS['Thumbshot'] = $Thumbshot;
    }

    
$Thumbshot->url $url;

    if( 
$w $Thumbshot->width $w;
    if( 
$h >= $Thumbshot->height $h;

    
// Получаем тамбшот
    
return $Thumbshot->get();
}

?>

Примеры использования

Загузите папку "thumbs" на ваш сервер, например, в корневую директорию сайта. Предположим что адрес вашего сайта mywebsite.ru , таким образом, для показа скриншота сайта thumbshots.ru используйте следующий тег. <img src="http://mywebsite.ru/thumbs/index.php?url=thumbshots.ru" alt="Сайт" /> Вы можете сократить адрес вызова скриншота убрав index.php <img src="http://mywebsite.ru/thumbs/?url=thumbshots.ru" alt="Сайт" />

При первом запросе скрипт создаст директорию для хранения скриншотов (по умолчанию /cache). Вы можете задать различное время кеширования для успешных скриншотов, добавленных в очередь скриншотов и технических сообщений.

Что делать если что-то не работает...

Если вы считаете что скрипт работает не корректно, включите режим отладки. В таком случае по ходу запроса будет выводиться техническая информация, которая позволит определить что идет не так. Режим отладки можно включить двумя с пособами:
- [для всех]: сообщения показываются для всех запросов
- [для конкретного IP адреса]: сообщения показываются только если запрос выполнен с указанного IP адреса

Для всех $Thumbshot->debug = 1; Для конкретного IP адреса $Thumbshot->debug_IP = '123.123.123.123';
15 комментариев
Комментарий от forumroditeley.ru, 17 Сентябрь 2012, 03:39
Я могу поставить ваш скрипт на форум с движком phpBB2 ?????
Комментарий от Alex, 17 Сентябрь 2012, 17:14
Можно. Пример установки кода на phpBB2 и phpBB3 приведен на этой странице.
Вместо адреса get.thumbshots.ru вы можете поставить адрес скрипта, например
http://mywebsite.ru/thumbs/?url=\\1
Комментарий от forumroditeley.ru, 18 Сентябрь 2012, 11:44
Огромное спасибо вам за ответ. Буду пробывать ставить!
Комментарий от Ivan D., 09 Декабрь 2012, 06:56
Здравствуйте.
Подскажите, как подифицировать скрипт, чтобы сохранять к себе на сервер скриншот сразу двух размеров (маленький и побольше), а затем через вызов вида http://mywebsite.ru/thumbs/?url=thumbshots.ru&size=big вызывать нужный размер ?
Комментарий от Alex, 09 Декабрь 2012, 10:21
Для этого меняем первую часть скрипта.

if( !empty($_GET['url']) && !empty($_GET['size']) )
{
    // Запрашиваем маленькую картинку
    $small = get_image( $_GET['url'], 120, 90 );

    // Запрашиваем большую картинку
    $large = get_image( $_GET['url'], 320, 240 );

    switch( $_GET['size'] )
    {   // показываем нужную картинку
        case 'small': echo $small; break;
        case 'large': echo $large; break;
    }
}


http://mywebsite.ru/thumbs/?url=thumbshots.ru&size=small
http://mywebsite.ru/thumbs/?url=thumbshots.ru&size=large
Комментарий от Ivan D, 10 Декабрь 2012, 01:52
Огромное спасибо!
Комментарий от Ivan D, 23 Декабрь 2012, 14:36
Еще есть отличная идея, добавьте в скрипт удаление старых файлов (которые не менялись больше месяца), т.к. если скриншот не обновляется, значит он больше не нужен.
Комментарий от Alex, 24 Декабрь 2012, 16:16
Да, идея хорошая, но для этого придется сканировать директорию с файлами при каждом запросе. Это создаст лишнюю нагрузку. Может быть просто сделать очистку старых файлов по запросу, например: http://mywebsite.ru/thumbs/?cleanup
Комментарий от Ivan D,, 22 Январь 2013, 09:13
Alex, было бы хорошо.
еще такой вопрос, после перезда на новый сервер стали валить такие ошибки:
imagejpeg(): Unable to open 'тратата' for writing: Permission denied in /thumbs/_thumbshots.class.php on line 397

gd lib стоит, права на папке 777, поставил даже на внутренние в cache тоже 777, проблема осталась.
В чем может быть дело, не подскажите?

Комментарий от Alex, 22 Январь 2013, 09:07
Какая у вас версия скрипта? В 1.0.5 функция imagejpeg() вызывается на строке 426.
Комментарий от , 22 Январь 2013, 12:09
Поставил 1.0.5.
Теперь on line 558 и 426. Ничего не могу понять, все права на папках установлены, гугл тоже не помог.
Комментарий от Ivan D, 22 Январь 2013, 13:29
Насколько я понял, новые тамбшоты добавляются, а вот старые не хотят обновляться и ругаются.
Комментарий от , 22 Январь 2013, 16:36
На заметку: проблема решилась изменением настроек прав в файле php-класса:
var $chmod_files = 0777; // chmod created files
и массовым изменением прав для уже созданных файлов (не папок)
Комментарий от Alien2001, 27 Август 2013, 07:15
Скрипт по умолчанию отдает саму картинку, а можно ли сделать, чтобы отдавал ссылку на нее (из кэша или заглушку, если изображение еще не готово)? Спасибо
Комментарий от Alex, 31 Август 2013, 17:39
Попробуйте убрать эту строку, или поставить значение FALSE

[codeblock lang="" line="1"]$Thumbshot->return_binary_image = true;[/codeblock]

Комментарии закрыты для этой записи.

Что ищут на сайте...