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 はソケットが応答する前に計算され、応答が受信される限り実行され続けることです。
コードをコピー | |||||||||||||
1 php.iniでdefault_socket_timeout =120を直接変更します
2 ini_set('default_socket_timeout', 120);
3 $strm = stream_context_create(array( |
コードは次のとおりです | コードをコピー |
トップ - 10:34:18 724 日、21:01、3 ユーザー、負荷平均: 17.86、11.16、7.69 PID ユーザー PR NI VIRT RES SHR S %CPU %MEM コマンド その中の 1 つの CPU 100% の php-cgi 処理の PID、以下のコマンドを使用して追跡します: strace -p 10747 |
如果屏風显示:
代码如下 | 复制幣 |
select(7, [6], [6], [], {15, 0}) = 1 (out [6]、左 {15, 0}) |
したがって、file_get_contents() によって引き起こされる問題が解決されたことがわかります。
同様に、この問題を解決するためにタイムアウトを設定します。カールができていない場合は、この方法を使用する必要があります。
复制幣 | |
'http' =>配列(
'タイムアウト' => 1 //設定は超過時間、单位は |
http://www.bkjia.com/PHPjc/631590.html