foreach 通过 curl 函数循环 运行

foreach loop running through curl function

为了这个愚蠢的问题,我已经挠头好几天了。

我从数据库中提取了一个名为 $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 没有输出任何内容。但是,如果我将 $row["url"] 替换为 http://example.com,则刮擦会正确发生。

这是我第一次在 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,它工作正常,只是在循环中时不行。

至于$url_array,这是我打印出来的结果-

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

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

我也试过对数据进行 for 循环。如果我将 scrapePage 函数修改为 return the $url,它 returns the $url 正确。

你的 $url_array 是嵌套的,你应该尝试按照以下方法获取 url 并使用你的 scrapePage 函数:

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

经过一番头痛之后,我找到了问题所在。我的 url 数据库是这样的 -

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

请注意末尾的“\r”,这会弄乱 cURL。我原以为给我的数据库是干净的。显然不是!我刚刚删除了所有尾随的 \r,所有代码都按预期工作。