検索
ホームページバックエンド開発PHPチュートリアルPHP_PHP チュートリアルでのcurl、fsocket、file_get_contentの使用の比較

リモートコンテンツをキャプチャするには、以前からfile_get_content関数を使用していました。curlなどの優れた機能の存在は知っていましたが、実際に見てみると、使い方がかなり複雑であると感じました。 file_get_content ほど単純ではないし、需要も大きくないので、curl の使い方を学びませんでした。
最近まで、Web 泥棒プログラムを作成しようとしていたときに、file_get_content ではニーズを満たせないことがわかりました。リモート コンテンツを読み取る場合、file_get_content はcurl よりも使いやすい点を除けば、curl ほど優れたものではないと思います。

phpのcurlとfile_get_contentの比較

主な違い:

勉強した結果、curl は FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE、LDAP などの多くのプロトコルをサポートしていることがわかりました。つまり、file_get_content では実行できない多くのことが実行できます。 Curl は、PHP でのコンテンツのリモート取得と収集を実現できます。PHP Web バージョンの FTP アップロードとダウンロードを実装します。インターフェイス ドッキング (API) を実装し、データ転送をシミュレートします。機能は非常に強力です。

curl の基本的な使い方をいくつか理解した後、いくつかの設定パラメータを覚えるのは少し難しいだけですが、一般的に使用されるパラメータをいくつか覚えておくだけで十分であることがわかりました。

カールを有効にする:

PHP はデフォルトではcurl関数をサポートしていないため、curlを使用したい場合は、まずphp.iniでこの関数を有効にする必要があります。つまり、;extension= php_curl.dllの前のセミコロンを削除してから保存し、 Apache/iisを再起動してください。

基本構文:

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

$my_curl =curl_init() //curl オブジェクトを初期化します
curl_setopt($my_curl, CURLOPT_URL, "http://www.jb51 .net" ; =curl_exec($curl); //リクエストを実行
echo $str; //取得した結果を出力
curl_close($curl); //URLリクエストをクローズ


最近、他の人のウェブサイトから音楽データを入手する必要があります。 file_get_contents 関数を使用しましたが、マニュアルの例に従ってタイムアウトを設定しても、ほとんどの場合機能しません。

$config['context'] = stream_context_create(array('http' => array('method' => "GET",

'timeout' => 5//このタイムアウトは不安定で、多くの場合機能しません

)
));

この時点で、サーバーの接続プールを見ると、同様のエラーがたくさん見つかり、頭が痛くなります:

file_get_contents(http://***): ストリームを開けませんでした…


今度は、curl ライブラリを使用して、関数の置換を書きました:

functioncurl_file_get_contents($durl){

$ch =curl_init();
curl_setopt($ch, CURLOPT_URL, $durl);
curl_setopt($ch, CURLOPT_TIMEOUT, 5) );
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_REFERER,_REFERER_);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r =curl_exec($ch);
curl_close ($ch );
$r を返す;
}

したがって、実際のネットワークの問題以外の問題はなくなりました。

これは他の人が行ったcurlとfile_get_contentsに関するテストです:

file_get_contentsがgoogle.comをクロールするのにかかる秒数:

2.31319094

2.30374217

2.21512604
3.30553889
2.30124092

カールの使用時間:

0.68719101

0.64675593

0.64326
0.81983113
0.63956594

大きなギャップはありますか?あはは、私の経験から言えば、これら 2 つのツールは速度が異なるだけでなく、安定性も異なります。

ネットワーク データ キャプチャの安定性に対する要求が高い友人には、上記のcurl_file_get_contents関数を使用することをお勧めします。安定して高速なだけでなく、ブラウザを偽装してターゲット アドレスを偽装することもできます。

方法 1: file_get_contents を使用して get モードでコンテンツを取得します

コードをコピーします コードは次のとおりです:
$url='http://www.domain.com/';
$html = file_get_contents($url);
エコー $html
?>


方法 2: fopen を使用して URL を開き、get メソッドを使用してコンテンツを取得します

コードをコピー コードは次のとおりです:
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while(!feof($fp) )) {
$result .= fgets($fp, 1024);
}
echo "url body: $result";
fclose($fp);
?>


方法 3: file_get_contents 関数を使用して投稿モードで URL を取得します

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

$data = array ('foo' => 'bar');
$data = http_build_query($data);

$opts = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencodedrn" .
"Content-Length: " . strlen($data) . "rn",
'content' => $data
)
);
$context = stream_context_create($opts);
$html = file_get_contents('http: //localhost/e/admin/test.html', false, $context);
echo $html;
?>

方法4:fsockopen関数を使ってurlを打ち、ヘッダーとボディを含む完全なデータを取得します

复制代码代码如下:

function get_url ($url,$cookie=false)
{
$url = parse_url($url);
$query = $url[path ]."?".$url[クエリ];
echo "クエリ:".$query;
$fp = fsockopen( $url[ホスト], $url[ポート]?$url[ポート]:80 , $errno , $errstr, 30);
if (!$fp) {
return false;
} else {
$request = "GET $query HTTP/1.1rn";
$request .= "ホスト: $url[host] rn";
$request .= "接続: 閉じるrn";
if($cookie) $request.="Cookie: $cookien";
$request.="rn";
fwrite($fp,$request);
while()) {
$result .= @fgets($fp, 1024);
}
fclose($fp);
return $result;
}
}
//获取urlのhtml部分、去掉ヘッダー
function GetUrlHTML($url,$cookie=false)
{
$rowdata = get_url($url,$cookie);
if($rowdata)
{
$body= stristr($rowdata,"rnrn");
$ body=substr($body,4,strlen($body));
return $body;
}
return false;
}
?>

方法5:fsockopen関数を使ってurlを打ち、ヘッダーとボディを含む完全なデータをPOST形式で取得します

复制代码代码如下:

function HTTP_Post($URL,$data,$cookie, $referrer="")
{
// 指定された URL を解析します
$URL_Info= parse_url($URL);

// リファラーを構築する
if($referrer=="") // 指定されていない場合は、このスクリプトをリファラーとして使用します
$referrer="111″;

// $data から文字列を作成します
foreach($data as $key=>$value)
$values[]="$key=".urlencode($value);
$data_string=implode("&", $values);

// 必要なポートを調べます – 指定されていない場合は、standard (=80) を使用します
if(!isset($URL_Info["port"]))
$URL_Info["port"]=80;

// POST-request:
$request.="POST ".$URL_Info["path"]." HTTP/1.1n";
$request.="ホスト: ".$URL_Info["host"] を構築しています。 "n";
$request.="リファラー: $referern";
$request.="コンテンツ タイプ: application/x-www-form-urlencodedn";
$request.="コンテンツの長さ: ".strlen ($data_string)."n";
$request.="接続: クローズ";

$request.="クッキー: $cookien";

$request.="n";
$request.=$data_string."n";

$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
fputs($fp, $request);
while(!feof($fp)) {
$result .= fgets ($fp, 1024);
}
fclose($fp);

return $result;
}
?>

方法 6:curl を使用する、curl を使用する前に、次の php.ini が既に打开了しているかどうかを確認する必要がある可能性があります

复制代码代码如下:

$ch =curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'http://www.domain.com /');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents =curl_exec($ch);
curl_close($ch);
echo $file_contents;
?>

phpのcurl、fsockopen、file_get_contentsの3つの関数はいずれも模擬音声の収集を実現できます。 3つの違いや注意点はありますか

Zhao Yongbin:
file_get_contents() を使用して外部ファイルを呼び出すと、タイムアウト エラーが報告されやすくなることがあります。これをcurlに変更するだけです。具体的な理由は不明です。Curlはfile_get_contents()やfsockopen()よりも効率的です。その理由は、CURLがDNS情報を自動的にキャッシュするためです(私が個人的にテストするためです)。
Fan Jiapeng:

file_get_contentscurl fsockopen

現在要求されている環境での選択的な操作、一般化なし:
弊社が開発した KBI アプリケーションに基づく:
使い始めたばかり: file_get_contents
後に採用: fsockopen
現在まで最終的に使用:curl

(リモート) 個人的に理解している表現は以下の通りです(間違っていたらご指摘ください、間違っていたら追記してください)

file_get_contentsはphp.iniのallow_url_fopenを有効にする必要があります httpリクエストの場合はhttp_fopen_wrapperを使用すればOKです。 keeplive.curl を知らない場合。

file_get_contents() は 1 回の実行効率が高く、ヘッダーなしで情報を返します。
通常のファイルを読み取る場合には問題ありませんが、リモートファイルを読み取る場合には問題が発生します。
継続的に接続したい場合は、複数のページを複数回リクエストしてください。その場合、file_get_contents と fopen に問題が発生します。
取得した内容が間違っている可能性もあります。したがって、同様の収集作業を行う場合、必ず問題が発生します。
sock は比較的低レベルであり、設定も操作も困難です。 完全な情報を返します。

Pan Shaoning-Tencent:

file_get_contents 特定の URL のコンテンツを取得することはできますが、投稿して取得することはできません。

カールは、投稿したり取得したりできます。ソケットが下位レベルにあるときにヘッド情報
を取得することもできます。 file_get_contents とcurl がそれを実行できる場合は、UDP または TCP プロトコルに基づいて対話するように設定できます。
socket でできることは、curl ではできない場合が多く、データを取得するだけです。より効率的でシンプルです。
私も Zhao の状況に遭遇しました。CURL を通じてホストを設定しましたが、問題ありませんでした。 これはネットワーク環境に関係があります



http://www.bkjia.com/PHPjc/767609.html

www.bkjia.com

http://www.bkjia.com/PHPjc/767609.html技術記事リモートコンテンツをキャプチャするには、以前から file_get_content 関数を使用していました。 実は、curl などの優れた関数の存在は知っていましたが、実際に見てみると、使い方がかなり複雑だと感じました。 ...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

同時性については、PHP 8.1の繊維を説明します。同時性については、PHP 8.1の繊維を説明します。Apr 12, 2025 am 12:05 AM

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティ:リソース、サポート、開発PHPコミュニティ:リソース、サポート、開発Apr 12, 2025 am 12:04 AM

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。