Содержание
Pingback
Класс Pingback - это реализация протокола pingback 1.0 (клиент и сервер).
Пространство имен: Web
Расположение файла:lib/web/pingback.php
Требования
Классу Pingback требуется расширение PHP XML-RPC . Без него класс Pingback работать не будет.
Вы можете легко проверить его доступность на своем сервере следующим образом:
$isPingbackAvailable = extension_loaded('xmlrpc'); // returns TRUE or FALSE
Инициализация
Вернуть экземпляр класса
$pingback = Web\Pingback::instance();
Класс Pingback использует фабричную оболочку Prefab , поэтому вы можете получить один и тот же экземпляр этого класса в любой точке вашего кода.
Методы
inspect
Загрузить содержимое локальной страницы,найти все HTML теги с ссылками, найти постоянные ссылки и отправить вызовы XML-RPC на соответствующие серверы pingback
NULL inspect ( string $source )
Эта функция выполняет веб-запрос для загрузки содержимого локальной страницы, заданного $source URL-адресом. Затем в полученном ответе ищутся все HTML теги с ссылками. Для каждой обнаруженной постоянной ссылки, ( <link rel=«pingback» />обычно) внутри страницы, вызовается XML-RPC ,который отправляет на соответствующий сервер pingback ( METHOD POST). (Каждый вызов XML-RPC регистрируется.Смотри функцию log(),для получения истории транзакций.)
Пример:
$pingback->inspect($source);
listen
Получите ping, проверьте, включена ли локальная страница pingback, проверьте исходное содержимое и верните ответ XML-RPC
string listen ( callback $func [ , string $path = NULL ] )
Эта функция позволяет настроить прослушиватель XML-RPC. Вам нужно определить маршрут F3 и привязать его к этой функции.
Функция в основном `прослушивает`, будучи привязанной к маршруту F3, для получения пинга, затем проверяет, включена ли локальная страница с поддержкой pingback, проверяет исходное содержимое и для каждой ссылки, найденной в исходном контенте, использует заданную функцию $func обратного вызова чтобы вернуть ответ XML-RPC.
Параметром $func является имя функции обратного вызова использовать для обработки запроса/пинг. Он будет вызываться так:
call_user_func_array($func, array($source,$req['body']));
с URL-адресом источника $source, а $req['body']возвращенная часть тела
Если $path не указан, используется значение системной переменной BASE .
В случае успеха эта функция выполнит die ,который вернет содержимое ответа XML в соответствии с функцией php xmlrpc_encode_request :
// Success die(xmlrpc_encode_request(NULL,$source,$options));
В случае ошибки эта функция выполнит die ,который вернет содержимое одного из следующих кодов ошибки:
die(xmlrpc_encode_request(NULL,0x11,$options)); // No link to local page found in request body die(xmlrpc_encode_request(NULL,0x10,$options)); // Source failure: web request failed or received doc malformed die(xmlrpc_encode_request(NULL,0x21,$options)); // Local page doesn't exist or is not pingback-enabled die(xmlrpc_encode_request(NULL,0x31,$options)); // Access denied: request method is not 'pingback.ping' or request malformed
Теперь давайте настроим базовый пример обработчика ping XML-RPC:
Нам нужен маршрут, функция прослушивания для привязки и функция обратного вызова:
// the callback function called by the listen() function. Takes 2 parameters function pingCallBackHandler($sourceURL, $reqBody) { $logger = new Log('pings.log'); $logger->write('Incoming ping from '.$sourceURL); // any processing on the $reqBody $logger->write('Request body length is '. \UTF::instance()->strlen($reqBody)); } // a route as an example, e.g. $f3->route('GET /listener','PingListener'); // the function to bind to the listener: function PingListener($f3, $params) { $pingback = new \Web\Pingback; // bind it with our custom callback function $pingback->listen('pingCallBackHandler'); return; }
log
Вернуть историю транзакций
string log ( )
Эта функция возвращает историю транзакций, зарегистрированную функцией inspect(). История транзакций состоит из списка URL-адресов постоянных ссылок, найденных на каждой проверенной странице, и это для каждого ответа на запрос.
Пример:
echo $pingback->log();
// Outputs: Mon, 06 Jan 2014 10:23:00 +0100 /comments-feed?page=pingback/cf [permalink:/pingback] /pingback2?page=pingback/client Mon, 06 Jan 2014 10:23:01 +0100 /rss2-feed?page=pingback/rss2 [permalink:/rss2-ping] /pingback2?page=rss2-ping/client
__construct
Создать экземпляр класса
object __construct ( )
Конструктор позволяет создать экземпляр класса.
Пример:
$pingback = new Pingback ( )
Примечание: для удобства ,этот конструктор вызывает libxml_use_internal_errors (TRUE) ,чтобы скрывать ошибоки, вызванные недопустимыми структурами HTML.
enable
Вернуть TRUE, если URL-адрес указывает на ресурс с поддержкой pingback.
protected bool enabled ( $url )
Эта функция возвращает TRUE, если данный URL указывает на ресурс с включенной функцией pingback.
Эта функция с областью видимости protected, используется внутри inspect() и listen() для того, чтобы убедиться, что данный URL-адрес указывает на ресурс с поддержкой pingback, то есть она ищет допустимый заголовок pingback и сканирует страницу, чтобы убедиться, что она содержит тег(и) ссылок pingback.