我正在使用get_headers($ url,1)来获取重定向状态。我得到一些结果,但不是每个$ url。 如果url1重定向到url2-> ulr3-> url4,依此类推。我想全部追踪。
到目前为止,我的代码:
$url = "https://somedomain.com";
$headerarray = get_headers($url,5);
for($i=0;$i<=10;$i++)
{
if(isset($headerarr1[$i]))
{
if(sizeof($headerarr1[$i])>0)
{
echo $headerarr1[$i]."->";
if(isset($headerarr1['Location'][$i]))
{
if(sizeof($headerarr1['Location'][$i])>0)
{
echo $headerarr1['Location'][$i]."<br>";
}
}
}
}
}
我能够跟踪url是否跳转到301-> 302-200ok,但是此代码不会跟踪所有url。例如如果网址未重定向,则应返回200OK。但是我的代码开始出现错误。请帮助我解决此问题,例如未定义的偏移“位置”。
答案 0 :(得分:0)
如果您想一遍又一遍地做一些事情,直到获得理想的结果,则可能始终需要recursion。看来您的代码只执行一次get_headers
,所以您将只知道第一个标头结果,而仅此而已。
类似的事情应该可以解决:
$url = 'https://google.com';
$httpCode = '';
while ($httpCode !== 'HTTP/1.0 200 OK') {
$headers = get_headers($url, 5);
$httpCode = $headers[0]; // May not be the this key, but you will figure that out yourself.
if (array_key_exists('Location', $headers) && !empty($headers['Location']) {
$url = $headers['Location'];
echo sprintf(' -> %s', $url);
} else {
break; // The location header is not set, so we have no idea where to follow to.
}
}
此解决方案可能并不完美,可能需要一些反复试验。我建议您使用一些库,因为几乎每个人都必须使用PHP进行某种请求,并且那里有很好的库,例如Guzzle,这使一切都变得更加简单。