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.

Печать/экспорт