当我运行下面的代码时,它只显示可通过“domainslist.txt”中列出的最后一个网址访问的网页。它不显示早期的网页。
例如,如果“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)是正确的字符数。但是,手动创建阵列时,没有多余的字符。
答案 0 :(得分:1)
您的代码似乎没问题,所以我的猜测是domainlist.txt
有些奇怪您需要检查的第一件事是执行foreach ($urls as $url)
的频率以及$ 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));
}
答案 1 :(得分:1)
添加标记 FILE_IGNORE_NEW_LINES
file('domainslist.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
手动功能file()
答案 2 :(得分:1)
假设您的“domainslist.txt”文件的示例是文件本身的外观,请在网址末尾添加斜杠(/),代码就可以使用。
打开文件时添加标志FILE_IGNORE_NEW_LINES也应该这样做。