foreach循环通过curl函数运行

时间:2017-10-27 13:00:39

标签: php digital-ocean

在这个愚蠢的人身上,我一直在摸不着头脑。

我从数据库中提取了一个名为$ url_array的url数组,如此 -

Array (
    [id] => 2
    [url] => http://example.com
)

我有一个foreach循环,它运行在$ url_array上并且为这样的数据抓取url -

foreach ($url_array as $row) {
    $data = $this->scrapePage($row["url"]);
    print_r($data);
    return false;
}

目前$ data一直没有输出。但如果我用http://example.com替换$ row [“url”],则刮擦正确。

这是我第一次在DigitalOcean上托管这个脚本,所以我不确定是否有任何服务器技术可能会阻止foreach循环工作。

编辑: 这是scrapePage函数 -

private function scrapePage($url) {
    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Charset: utf-8'));
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_VERBOSE, true);

    $content = curl_exec($ch);
    $header = curl_getinfo($ch);
    curl_close($ch);

    return array("header" => $header, "content" => $content);
}

就像我说的那样,如果我在那里手动输入一个网址,它就可以正常工作,而不是在循环中。

至于$ url_array,这是我打印出来时的输出 -

Array
(
    [0] => Array
        (
            [id] => 41
            [url] => http://www.example1.com
        )

    [1] => Array
        (
            [id] => 85
            [url] => http://test-url-2.com
        )
)

我也尝试过for循环数据。如果我修改scrapePage函数以返回$ url,它会正确返回$ url。

2 个答案:

答案 0 :(得分:0)

你的$ url_array是嵌套的,你应该尝试以下来获取网址并使用你的scrapePage函数:

foreach ($url_array as $row => $value) {
    foreach ($value as $row => $value) {
        if($row === 'url') {
        //$urls[]=$value;
        $data = $this->scrapePage($value);
        print_r($data);
        }
    }
}

答案 1 :(得分:0)

经过多次头痛,我发现了这个问题。我看起来像这样的网址数据库 -

http://www.example1.com\r
http://www.example2.com\r
http://www.example3.com\r
http://www.example4.com\r

注意" \ r"最后,那弄乱了cURL。我假设我给的数据库很干净。显然不是!我刚刚删除了所有尾随的\ r \ n并且所有代码都按预期工作。