在这个愚蠢的人身上,我一直在摸不着头脑。
我从数据库中提取了一个名为$ 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。
答案 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并且所有代码都按预期工作。