我在test.php
中有以下代码:
<?php
$url = "http://pars.mp3hunt.me/r1.php";
$again = 1;
while ($again == 1) {
$headers = get_headers($url, 1);
preg_match('/\b([3]\d\d)\b/', $headers[0], $matches); // 3XX error
if (count($matches) > 0) {
$url = $headers['Location'];
} else {
$again = 0;
}
}
if (is_array($url)) {
echo 'yes';
}
print_r($url);
?>
并重定向到r1.php
r2.php
。
r1.php
有:
<?php
$url="http://pars.mp3hunt.me/r2.php";
header('Location: ' . $url, true, 302);
?>
`r2.php
<?php
$url="http://pars.mp3hunt.me/r3.php";
header('Location: ' . $url, true, 302);
?>
和r3.php
有一些文字。
现在,当$url
变量被分配http://pars.mp3hunt.me/r1.php
时,打印的$url
是一个数组,当它被分配http://pars.mp3hunt.me/r2.php
时,它就是一个字符串。问题是为什么会这样?我只在每个地方分配$url
个字符串。我还没有将$url
声明为数组,并且在两次重定向(迭代)之后它仍然成为一个数组,并且在一次重定向(迭代)中它是字符串。
答案 0 :(得分:0)
您描述的是正常行为。当你在这里处理重定向时,get_headers
可能会有多个请求,因为它默认执行HTTP GET请求。
使用Select
EU.[Store No]
,EU.[Store Name]
,sum(case when SA.Fiscalyear = 2017 and EU.Country = 'UK' then SA.Salesexvat/SA.ExchangeRateEuro end ) AS '2017 UK'
,sum(case when SA.Fiscalyear = 2016 and EU.Country = 'UK' then SA.Salesexvat/SA.ExchangeRateEuro end ) AS '2016 UK'
,sum(case when SA.Fiscalyear = 2017 and EU.Country = 'UK' then SA.Salesexvat/SA.ExchangeRateEuro end ) / sum(case when SA.Fiscalyear = 2016 and EU.Country = 'UK' then SA.Salesexvat/SA.ExchangeRateEuro end ) - 1 as variance
From
dbo.EUACTIVESTORES EU
Join
EUUKSQL01.dashboard.dbo.SalesAggregateWeek SA On SA.BranchNo = EU.[Store No]
where EU.[Upload Type]='Main' and SA.fiscalweek <=19
group by EU.[Store No], EU.[Store Name]
order by EU.[Store No]
网址,您会看到一个位置条目(因此是一个字符串),但使用http://pars.mp3hunt.me/r2.php
网址,您会看到两个位置条目(因此也是一个数组)。
请参阅the link I've left in the comment,了解如何解析http://pars.mp3hunt.me/r1.php
的结果和/或如何控制行为(例如,执行HTTP HEAD请求而不是GET请求)。 Stackoverflow上还有关于此的更多信息。
示例:
get_headers
输出:
$urls = [
"http://pars.mp3hunt.me/r2.php",
"http://pars.mp3hunt.me/r1.php"
];
foreach ($urls as $url) {
$headers = get_headers($url, 1);
echo $url, ":\n";
var_dump($headers['Location']);
echo "\n";
}