大家好。 从短链接开始:
想象一下,你有一个包含 5 个短链接(例如 http://bit.ly)的 PHP 数组,就像这样:
$shortUrlArray = array("http://bit.ly/123",
"http://bit.ly/123",
"http://bit.ly/123",
"http://bit.ly/123",
"http://bit.ly/123");
以最终的重定向链接结尾:
如何使用php获取这些短链接的最终url?像这样:
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
我有一种方法(在网上找到的)可以正常使用单个url,但是循环多个url时只能使用数组中的最后一个url。供您参考,该方法如下:
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
//$header['errno'] = $err;
//$header['errmsg'] = $errmsg;
//$header['content'] = $content;
print($header[0]);
return $header;
}
//Using the above method in a for loop
$finalURLs = array();
$lineCount = count($shortUrlArray);
for($i = 0; $i <= $lineCount; $i++){
$singleShortURL = $shortUrlArray[$i];
$myUrlInfo = get_web_page( $singleShortURL );
$rawURL = $myUrlInfo["url"];
array_push($finalURLs, $rawURL);
}
接近目标,但还不够
这种方法可以工作,但只能用于单个URL。我想要在for循环中使用它,但不能。当在for循环中使用上述示例时,前四个元素保持不变,只有最后一个元素会转换为其最终URL。无论数组是5个元素还是500个元素长,都会发生这种情况。
寻求的解决方案:
请给我一个提示,如何修改此方法以便在与URL集合一起使用时在for循环内部使用(而不仅仅是一个)。
-或-
如果您知道更适合此任务的代码,请在答案中包含它。
提前致谢。
更新:
经过进一步探究,我发现问题并不在上述方法中(毕竟,在for循环中似乎可以很好地工作),但可能与编码有关。当我硬编码一个短网址数组时,循环正常工作。但是当我使用GET或POST从HTML表单中传入一组用换行符分隔的网址块时,就会出现上述问题。当我提交表单时,URL是否被改成了不兼容该方法的格式???
新更新:
你们,我发现我的问题与上述方法无关。我的问题是,我的短网址的URL编码将我认为只是换行字符(分隔网址)转换为此:%0D%0A这是回车或换行符...所有短网址都除了集合中的最后一个URL以外,都在尾部附加了一个“幽灵”字符,因此对于那些仅有的最终URL是不可能检索的。我确定了幽灵字符,更正了我的php explode,现在一切都很好。抱歉和谢谢。