获取一个小URL';s真实URL并存储为PHP变量

获取一个小URL';s真实URL并存储为PHP变量,php,url,youtube,Php,Url,Youtube,我想获取Youtube URL的视频ID,但在共享时,该URL通常会压缩为一个小URL 例如,我有一个脚本,它根据视频ID获取Youtube视频的缩略图= <?php $vlog = "OeqlkEymQ94"; ?> <img src="http://img.youtube.com/vi/<?=$vlog;?>/0.jpg" alt="" /> 但是有时候URL是一个很小的URL,所以我必须弄清楚如何返回真正的URL,这样我才能使用它 http://tin

我想获取Youtube URL的视频ID,但在共享时,该URL通常会压缩为一个小URL

例如,我有一个脚本,它根据视频ID获取Youtube视频的缩略图=

<?php $vlog = "OeqlkEymQ94"; ?>
<img src="http://img.youtube.com/vi/<?=$vlog;?>/0.jpg" alt="" />
但是有时候URL是一个很小的URL,所以我必须弄清楚如何返回真正的URL,这样我才能使用它

http://tinyurl.com/kmx9zt6
是否可以通过PHP检索URL的真实URL?

您可以使用或抓取
位置
标题:

function getFullURL($url) {
    $headers = get_headers($url);
    $headers = array_reverse($headers);
    foreach($headers as $header) {
        if (strpos($header, 'Location: ') === FALSE) {
            $url = str_replace('Location: ', '', $header);
            break;
        }
    }    
    return $url;
}
用法:

echo getFullURL('http://tinyurl.com/kmx9zt6');

注:这是对要点的一个稍加修改的版本

作为将来的参考,我使用了一个简单得多的函数,因为我的小URL总是会解析到Youtube,并且标题几乎总是一样的:

function getFullURL($url) {
    $headers = get_headers($url);
    $url = $headers[4]; //This is the location part of the array
    $url = str_replace('Location: ', '', $url);
    $url = str_replace('location: ', '', $url);  //in my case the location was lowercase, but it can't hurt to have both
    return $url;
}
用法-

echo getFullURL('http://tinyurl.com/kmx9zt6');

您可以将CURL与
CURLOPT_FOLLOWLOCATION=TRUE一起使用,然后解析响应头。@Marcel将其设置为TRUE将使CURL自动遵循该重定向,并且只传递最终结果–它应该为false,以便您得到第一个请求的结果,这将在响应中包含位置标头…是的,但人们可能会争论这是否是想要的结果。对我来说,你会想遵循所有重定向,就像浏览器一样。虽然我明白你的意思。
echo getFullURL('http://tinyurl.com/kmx9zt6');