Home/APIs/ discover_pingback_server_uri() – Finds a pingback server URI based on the given URL.

You appear to be a bot. Output may be restricted

Description

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.

Usage

$string|false = discover_pingback_server_uri( $url, $deprecated );

Parameters

$url

( string ) required – URL to ping.

$deprecated

( int ) optional – Not Used.

Returns

string|false String containing URI on success, false on failure.

Source

File name: wordpress/wp-includes/comment.php

Lines:

1 to 78 of 78

functiondiscover_pingback_server_uri($url,$deprecated=''){if(!empty($deprecated)){_deprecated_argument(discover_pingback_server_uri,'2.7.0');}$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 a URL. This should never happen.
returnfalse;}// Do not search for a pingback server on our own uploads.
$uploads_dir=wp_get_upload_dir();if(0===strpos($url,$uploads_dir['baseurl'])){returnfalse;}$response=wp_safe_remote_head($url,array('timeout'=>2,'httpversion'=>'1.0',));if(is_wp_error($response)){returnfalse;}if(wp_remote_retrieve_header($response,'x-pingback')){returnwp_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'))){returnfalse;}// 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)){returnfalse;}$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;}}returnfalse;}