0

被験者はそれをすべて言います。</head>ウェブサイトのストリームを開始し、たとえばが見つかったときに停止する必要があります。両端の帯域幅を維持し、スクリプトの実行時間を節約するためにそれを行いたいと思います。

ページのコンテンツ全体をメモリにダウンロードしたくありません。PHP で、ブロック単位でコンテンツのストリームが必要です。

コミュニティに感謝します、私はあなたたちを愛しています:)

4

1 に答える 1

1
<?php

function streamUntilStringFound($url, $string, $timeout = 30){

    // remove the protocol - prevent the errors
    $url = parse_url($url);
    unset($url['scheme']);
    $url = implode("", $url);

    // start the stream
    $fp = @fsockopen($url, 80, $errno, $errstr, $timeout);
    if (!$fp) {
        $buffer = "Invalid URL!"; // use $errstr to show the exact error
    } else {
        $out  = "GET / HTTP/1.1\r\n";
        $out .= "Host: $url\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        $buffer = "";
        while (!feof($fp)) {
            $buffer .= fgets($fp, 128);
            // string found - stop downloading any new content
            if (strpos(strtolower($buffer), $string) !== false) break;
        }
        fclose($fp);
    }

    return $buffer;

}

// download all content until closing </head> is found
$content = streamUntilStringFound("whoapi.com", "</head>");

// show us what is found
echo "<pre>".htmlspecialchars($content);

?>

重要な注意: (@GordonM に感謝)

allow_url_fopenphp.iniを使用するには で有効にする必要がありますfsockopen()

于 2012-09-05T09:08:03.473 に答える