php_PHP チュートリアルの file_get_contents とcurl_get_contents の概要

WBOY
リリース: 2016-07-13 16:56:33
オリジナル
1247 人が閲覧しました

phpのfile_get_contentsとcurl_get_contentsの紹介。必要な友達はそれを参照してください。

実際に使用した機能を共有する:

file_get_contents() 関数は、ファイルの内容を文字列に読み取るための推奨される方法です。オペレーティング システムでサポートされている場合は、パフォーマンスを向上させるためにメモリ マッピング テクノロジも使用されます。

/*file_get_contents よりもはるかに安定しています。 $timeout はタイムアウト時間で、単位は秒、デフォルトは 1 秒です。 */

コードは次のとおりです コードをコピー
関数curl_get_contents($url,$timeout=1) {
$curlHandle =curl_init();
curl_setopt( $curlHandle , CURLOPT_URL, $url );
curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout );
$result =curl_exec( $curlHandle );
curl_close( $curlHandle );
$result を返します;
}
$hx =curl_get_contents('http://www.bKjia.c0m/');

file_get_contents 関数を使用したことのある友人は、取得した $url にアクセスできない場合、ページが長時間待機する原因となり、さらには PHP プロセスが CPU の 100% を占有することになることを知っていると思います。機能が誕生しました。


php.iniのdefault_socket_timeout設定により、デフォルトのタイムアウトはdefault_socket_timeout = 60です

コードは次のとおりです コードをコピー
最大実行時間 = 30
デフォルトソケットタイムアウト = 60

file_get_contents を使用すると、45 かかり、max_execution_time が 30 になると、タイムアウトになりますか?
答えは「いいえ」です。max_execution_time はオペレーティング システムの呼び出しやストリーム操作に影響を与えないからです
もう 1 つ指摘すべき点は、default_socket_timeout はソケットが応答する前に計算され、応答が受信される限り実行され続けることです。

以下の3通りの方法で設定可能です

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

カールの常識的な紹介

元の file_get_contents 関数を保持する理由は、ローカル ファイルを読み取るときに、ネイティブの file_get_contents を使用する方が明らかに適切であるためです。

Zhang Yan による file_get_contnets の別の最適化については、以下を参照してください:

まず、top コマンドを使用して、CPU 使用率が高い php-cgi プロセスを表示します。

1 php.iniでdefault_socket_timeout =120を直接変更します

2 ini_set('default_socket_timeout', 120); 3 $strm = stream_context_create(array(
'http' => array(
'タイムアウト' => 120
)
)
);

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

トップ - 10:34:18 724 日、21:01、3 ユーザー、負荷平均: 17.86、11.16、7.69
タスク: 合計 561、実行中 15、睡眠 546、停止 0、ゾンビ 0
CPU: 5.9%us、4.2%sy、0.0%ni、89.4%id、0.2%wa、0.0%hi、0.2%si、0.0%st
メモリ: 合計 8100996k、使用済み 4320108k、空き 3780888k、バッファー 772572k
スワップ: 合計 8193108k、使用済み 50776k、空き 8142332k、キャッシュ済み 412088k

PID ユーザー PR NI VIRT RES SHR S %CPU %MEM コマンド
10747 www 18 0 360m 22m 12m R 100.6 0.3 0:02.60 php-cgi
10709 www 16 0 359m 28m 17m R 96.8 0.4 0:11.34 php-cgi
10745 www 18 0 360m 24m 14m R 94.8 0.3 0:39.51 php-cgi
10707 www 18 0 360m 25m 14m S 77.4 0.3 0:33.48 php-cgi
10782 www 20 0 360m 26m 15m R 75.5 0.3 0:10.93 php-cgi
10708 www 25 0 360m 22m 12m R 69.7 0.3 0:45.16 php-cgi
10683 www 25 0 362m 28m 15m R 54.2 0.4 0:32.65 php-cgi
10711 www 25 0 360m 25m 15m R 52.2 0.3 0:44.25 php-cgi
10688 www 25 0 359m 25m 15m R 38.7 0.3 0:10.44 php-cgi
10719 www 25 0 360m 26m 16m R 7.7 0.3 0:40.59 php-cgi

その中の 1 つの CPU 100% の php-cgi 処理の PID、以下のコマンドを使用して追跡します:

strace -p 10747

如果屏風显示:

代码如下 复制幣

select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (タイムアウト)

したがって、file_get_contents() によって引き起こされる問題が解決されたことがわかります。

同様に、この問題を解決するためにタイムアウトを設定します。カールができていない場合は、この方法を使用する必要があります。

代码如下$ctx = stream_context_create(array(
复制幣
   'http' =>配列(

       'タイムアウト' => 1 //設定は超過時間、单位は
秒        )
   )
);  
file_get_contents("http://www.hzhuti.com/", 0, $ctx);

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

tru​​ehttp://www.bkjia.com/PHPjc/631590.html技術記事 php の file_get_contents とcurl_get_contents の両方に必要な友人がいます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート