1

以下のコードを実行すると、「domainslist.txt」にリストされている最後のURLからアクセスできるWebページのみが表示されます。以前のWebページは表示されません。

たとえば、「domainslist.txt」に次のものが含まれている場合:

http://example[1].com
http://example[2].com
http://example[3].com

次に、コードはexample[3].comのWebページのみを表示します。

3つすべてが表示されないのはなぜですか?

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)); 

    }

注意:次のように、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);、配列を形成する2つの異なる方法の結果にはわずかな違いがあります。を使用して作成された配列の最初の2つのURLにはfile()、文字列の長さで報告される2つの余分な文字がありますが、最後のURL(表示されるURL)は正しい文字数です。ただし、配列を手動で作成する場合、余分な文字はありません。

4

3 に答える 3

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));
}
于 2012-12-06T10:15:57.590 に答える
1

フラグFILE_IGNORE_NEW_LINESを追加します

file('domainslist.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

手動関数file()

于 2012-12-06T10:20:51.217 に答える
1

「domainslist.txt」ファイルの例がファイル自体の外観であると仮定すると、URLの末尾にスラッシュ(/)を追加すると、コードが機能します。

ファイルを開くときにフラグFILE_IGNORE_NEW_LINESを追加することも、それを行う必要があります。

于 2012-12-06T10:26:58.957 に答える