この記事では、PHP でマルチスレッドを実現するために foreach とcurlを組み合わせた方法を主に紹介し、foreachステートメントとcurlループ呼び出しを組み合わせてマルチスレッドをシミュレートする方法を分析します。参照してください
マルチスレッドはPHPではサポートされていませんが、foreachを使用して擬似マルチスレッドにすることができますが、この擬似マルチスレッドの速度は必ずしもシングルスレッドの速度よりもはるかに速いわけではありません。例を見てみましょう
foreach ステートメントを使用して画像 URL をループしているのですが、CURL を使用してすべての画像をローカルに保存すると、1 つしか収集できないという問題が発生します。 foreach と CURL を使用して、複数の URL リクエストを作成します。
方法 1: ループリクエスト
$sr=array(url_1,url_2,url_3); foreach ($sr as $k=>$v) { $curlPost=$v.'?f=传入参数'; $ch = curl_init($curlPost) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 $data = curl_exec($ch) ; echo $k.'##:'.$data.'<br>'; } curl_close($ch);
上記のコードで特に注意が必要なのは、curl_close が foreach ループの終わりの外側に配置されている必要があることです。中に配置すると、上で述べたように複数の IMGURL が存在し、収集できる URL は 1 つだけです
方法 2: マルチスレッド ループ
<?php multi_threads_request($nodes){ $mh = curl_multi_init(); $curl_array = array(); foreach($nodes as $i => $url) { $curl_array[$i] = curl_init($url); curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $curl_array[$i]); } $running = NULL; do { usleep(10000); curl_multi_exec($mh,$running); } while($running > 0); $res = array(); foreach($nodes as $i => $url) { $res[$url] = curl_multi_getcontent($curl_array[$i]); } foreach($nodes as $i => $url){ curl_multi_remove_handle($mh, $curl_array[$i]); } curl_multi_close($mh); return $res; } print_r(multi_threads_request(array( 'http://www.jb51.net', 'http://tools.jb51.net', ));
ここでは主に、curl_multi_init() を使用して複数を実装します。 URL リクエスト ただし、PHP 自体はマルチスレッドをサポートしていないため、擬似マルチスレッドの速度は必ずしもシングルスレッドよりも高速であるとは限りません。皆様の学習のお役に立てれば幸いです。
関連する推奨事項: phpサーバー側ファイルを読み取り、Webページインスタンスに表示します
php
を使用してサーバーおよびWebフロントエンドインターフェイスと対話します
php
を使用して、1週間以内にストレージ機構に自動的にログインするように実装します
以上がPHP でマルチスレッドを実現するために、curl と組み合わせた foreach の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。