繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM