在PHP的foreach循环中使用file()+ CURL函数

时间:2012-12-06 09:53:54

标签: php loops curl

当我运行下面的代码时,它只显示可通过“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)是正确的字符数。但是,手动创建阵列时,没有多余的字符。

3 个答案:

答案 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也应该这样做。