function getRedirectUrl ($url) {
stream_context_set_default(array(
'http' => array(
'method' => 'HEAD'
)
));
$headers = get_headers($url, 1);
if ($headers !== false && isset($headers['Location'])) {
return $headers['Location'];
}
return false;
}
此外...
正如评论中提到的,final项目在$headers['Location']
将是所有重定向后的最终 URL。但值得注意的是,它不会always是一个数组。有时它只是一个普通的非数组变量。在这种情况下,尝试访问最后一个数组元素很可能会返回单个字符。不理想。
如果您只对最终 URL 感兴趣,在所有重定向之后,我建议更改
return $headers['Location'];
to
return is_array($headers['Location']) ? array_pop($headers['Location']) : $headers['Location'];
...这只是如果速记 https://davidwalsh.name/php-ternary-examples for
if(is_array($headers['Location'])){
return array_pop($headers['Location']);
}else{
return $headers['Location'];
}
此修复将处理任一情况(数组、非数组),并且无需在调用函数后清除最终 URL。
在没有重定向的情况下,该函数将返回false
。同样,该函数也会返回false
无效 URL(因任何原因无效)。因此,重要的是检查 URL 的有效性 https://stackoverflow.com/questions/2280394/how-can-i-check-if-a-url-exists-via-php?#answer-12628971 before运行此函数,或者将重定向检查合并到您的验证中。