循环是在迭代两次时创建数组,但是在PHP中只迭代一次时创建字符串

时间:2017-06-14 12:21:34

标签: php arrays loops http redirect

我在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声明为数组,并且在两次重定向(迭代)之后它仍然成为一个数组,并且在一次重定向(迭代)中它是字符串。

1 个答案:

答案 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";
}