ホームページ  >  記事  >  php教程  >  リモート Web コンテンツを取得するための PHP コード (fopen、curl テスト済み)

リモート Web コンテンツを取得するための PHP コード (fopen、curl テスト済み)

WBOY
WBOYオリジナル
2016-06-13 12:08:401256ブラウズ

1. fopen の使用

コードをコピーします コードは次のとおりです:





$handle = fopen ("http://s.jb51.net/", "rb");
$contents = ""
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle); //取得したコンテンツを出力します。
?>


コードをコピー

コードは次のとおりです:



// PHP 5 以降のバージョンでは、次のコードを使用できます。
$handle = fopen("http://s.jb51.net", "rb"); = stream_get_contents($handle );
fclose($handle);
echo $contents;

しかし、上記のコードはストリームを開くのに失敗する傾向があります。 HTTP リクエストが失敗しました! エラー、解決策


php.ini には、allow_url_fopen =on (URL 経由でリモート ファイルを開くことができることを示す)、user_agent="PHP" (どちらであるかを示す) があると言う人もいます。ネットワークにアクセスするためのスクリプト、デフォルトではその前の「;」を削除してサーバーを再起動します。
しかし、まだこの警告メッセージが表示される人もいます。php.ini で user_agent を設定する必要があります。これを Mozilla/4.0 に変更します。 (互換性; MSIE 6.0; Windows NT 5.0) ブラウザをシミュレートする

user_agent="Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.0)"

仕事中にこの問題に遭遇しました。ついに完璧に解決したので、皆さんにも共有します。

2.curl を使用して

コードをコピーします コードは次のとおりです:


$url = "http://s.jb51.net";
$ch =curl_setopt ($ch, CURLOPT_URL, $url); ($ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
echo $dxycontent;


Linux でダウンロードするには、次のコードを使用できます。
exec("wget {$url}");

PHP による外部リソース関数 fopen の取得の違い/ file_get_contents /curl

fopen / file_get_contents はリクエストごとに DNS クエリを再実行し、DNS 情報をキャッシュしません。
ただし、CURL は DNS 情報を自動的にキャッシュします。同じドメイン名の Web ページまたは画像に対するリクエストには、DNS クエリが 1 つだけ必要です。
これにより、DNS クエリの数が大幅に削減されます。
つまり、CURL のパフォーマンスは fopen / file_get_contents よりもはるかに優れています。

スクリプトハウスのオリジナルコンテンツです。転載する場合は出典を明記してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。