[英]Using file() + CURL function in a foreach loop in PHP
当我运行下面的代码时,它只显示通过“domainslist.txt”中列出的最后一个URL访问的网页。 它不显示早期的网页。
例如,如果“domainslist.txt”包含:
http://example[1].com
http://example[2].com
http://example[3].com
然后代码仅显示示例[3] .com中的网页。
为什么它不显示全部三个?
function url_get_contents($Url) {
if (!function_exists('curl_init')) {
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
$urls = file("domainslist.txt", FILE_SKIP_EMPTY_LINES);
foreach ($urls as $url) {
echo(url_get_contents($url));
}
NB如果我手动创建URL数组,如下所示:
$urls = array();
$urls[0] = "http://example[1].com";
$urls[1] = "http://example[2].com";
$urls[2] = "http://example[3].com";
然后它工作正常,显示所有3页。
编辑:
当我使用var_dump($urls);
两种不同的阵列形成方法的结果之间存在细微差别。 使用file()
创建的数组中的前两个URL在字符串长度中报告了两个额外的字符 - 但最终的URL(显示的URL)是正确的字符数。 但是,手动创建阵列时,没有多余的字符。
你的代码似乎没问题,所以我的猜测是domainlist.txt有些奇怪
您需要检查的第一件事是foreach ($urls as $url)
执行的频率foreach ($urls as $url)
的内容是多少。 应该是3次,显然是3个不同的URL。 如果文件采用奇怪的编码格式,还要检查附加到$ url的额外数据。
简而言之,尝试使用它进行调试,让我们知道输出。
function url_get_contents($Url) {
if (!function_exists('curl_init')) {
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, trim($Url)); //added trim to fix unintented chars from domainlist.txt
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
$urls = file("domainslist.txt", FILE_SKIP_EMPTY_LINES);
var_dump($urls);
foreach ($urls as $url) {
var_dump($url);
var_dump(url_get_contents($url));
}
添加标志FILE_IGNORE_NEW_LINES
file('domainslist.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
手动功能文件()
假设您的“domainslist.txt”文件的示例是文件本身的外观,请在URL的末尾添加斜杠(/),您的代码将起作用。
打开文件时添加标志FILE_IGNORE_NEW_LINES也应该这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.