被験者はそれをすべて言います。</head>
ウェブサイトのストリームを開始し、たとえばが見つかったときに停止する必要があります。両端の帯域幅を維持し、スクリプトの実行時間を節約するためにそれを行いたいと思います。
ページのコンテンツ全体をメモリにダウンロードしたくありません。PHP で、ブロック単位でコンテンツのストリームが必要です。
コミュニティに感謝します、私はあなたたちを愛しています:)
<?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_fopen
php.ini
を使用するには で有効にする必要がありますfsockopen()
。