disabled()

根据已给URL查找pingback的服务器URI

描述

根据已给URL查找pingback的服务器URI

查找rel=”pingback” 链接与 x-pingback标题的xhtml代码。该函数可检查x-pingback标题,如果标题可用就将其返回。检查rel=”pingback”比检查标题要占用更多系统开销。

用法

<?php discover_pingback_server_uri( $url, $deprecated ) ?>

参数

$url

(string) (必填) URL to ping.

默认值: None

$deprecated

(integer) (Not Used.)

默认值: None

返回值

(boolean|string) 

False on failure, string containing URI on success.

注意

使用到: wp_remote_get()

使用到: is_wp_error()

历史

添加于 版本: 1.5.0

源文件

discover_pingback_server_uri() 函数的代码位于 wp-includes/comment.php.

/**
* Finds a pingback server URI based on the given URL.
*
* Checks the HTML for the rel=”pingback” link and x-pingback headers. It does
* a check for the x-pingback headers first and returns that, if available. The
* check for the rel=”pingback” has more overhead than just the header.
*
* @since 1.5.0
*
* @param string $url URL to ping.
* @param int $deprecated Not Used.
* @return false|string False on failure, string containing URI on success.
*/

function discover_pingback_server_uri( $url, $deprecated = ” ) {

if ( !empty( $deprecated ) )

_deprecated_argument( __FUNCTION__, ‘2.7’ );

$pingback_str_dquote = ‘rel=”pingback”‘;

$pingback_str_squote = ‘rel=’pingback”;

/** @todo Should use Filter Extension or custom preg_match instead. */

$parsed_url = parse_url($url);

if ( ! isset( $parsed_url[‘host’] ) ) // Not an URL. This should never happen.

return false;

//Do not search for a pingback server on our own uploads

$uploads_dir = wp_upload_dir();

if ( 0 === strpos($url, $uploads_dir[‘baseurl’]) )

return false;

$response = wp_safe_remote_head( $url, array( ‘timeout’ => 2, ‘httpversion’ => ‘1.0’ ) );

if ( is_wp_error( $response ) )

return false;

if ( wp_remote_retrieve_header( $response, ‘x-pingback’ ) )

return wp_remote_retrieve_header( $response, ‘x-pingback’ );

// Not an (x)html, sgml, or xml page, no use going further.

if ( preg_match(‘#(image|audio|video|model)/#is’, wp_remote_retrieve_header( $response, ‘content-type’ )) )

return false;

// Now do a GET since we’re going to look in the html headers (and we’re sure it’s not a binary file)

$response = wp_safe_remote_get( $url, array( ‘timeout’ => 2, ‘httpversion’ => ‘1.0’ ) );

if ( is_wp_error( $response ) )

return false;

$contents = wp_remote_retrieve_body( $response );

$pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote);

$pingback_link_offset_squote = strpos($contents, $pingback_str_squote);

if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) {

$quote = ($pingback_link_offset_dquote) ? ‘”‘ : ”‘;

$pingback_link_offset = ($quote==’“‘) ? $pingback_link_offset_dquote : $pingback_link_offset_squote;

$pingback_href_pos = @strpos($contents, ‘href=’, $pingback_link_offset);
$pingback_href_start = $pingback_href_pos+6;
$pingback_href_end = @strpos($contents, $quote, $pingback_href_start);
$pingback_server_url_len = $pingback_href_end – $pingback_href_start;
$pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len);

// We may find rel=”pingback“ but an incomplete pingback URL

if ( $pingback_server_url_len > 0 ) { // We got it!

return $pingback_server_url;

}

}

return false;

}
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索