この記事の内容は、curl を使用してマルチスレッドをシミュレートしてリクエストを送信する PHP のコード例についてです。一定の参考値があります。必要な友人は参照してください。お役に立てれば幸いです。
各 PHP ファイルの実行はシングルスレッドですが、PHP 自体は、php-fpm プロセスの使用など、他のテクノロジーを使用してマルチスレッドの同時実行を実現することもできます。ここでは、curl が使用されますマルチスレッドの送信リクエストをシミュレートします。 PHP のcurl マルチスレッドは、curl_multi_exec を継続的に呼び出してコンテンツを取得します。これは、curl マルチスレッドの同時操作をシミュレートするデモです。
//设置缓冲为0(也可以去php.ini设置) ini_set('output_buffering', 0); //打开输出缓冲区 ob_start(); //设置一个空数组 $curl_Arr=[]; //这里模拟20次请求 for($i=0;$i<20;$i++){ //开启curl连接 $curl_Arr[$i]=curl_init("http://XXXX/test.php"); //CURLOPT_RETURNTRANSFER 设置为1表示稍后执行的curl_exec函数的返回是URL的返回字符串,而不是把返回字符串定向到标准输出并返回TRUE; curl_setopt($curl_Arr[$i],CURLOPT_RETURNTRANSFER,1); } //创建批处理cURL句柄 $mh = curl_multi_init(); foreach($curl_Arr as $k => $ch){ //curl句柄入栈增加 curl_multi_add_handle($mh,$ch); } $active = null; while(count($curl_Arr)>0){ //发起curl_multi请求 @curl_multi_exec($mh,$active); foreach($curl_Arr as $k => $ch){ //获取句柄的返回值 if($result[$k]= curl_multi_getcontent($ch)){ //输出结果 echo "$result[$k]\n"; ob_flush(); //把被释放的数据发送到浏览器 flush(); //关闭该句柄 curl_multi_remove_handle($mh,$ch); unset($curl_Arr[$k]); } } } //关闭ouput_buffering机制 ob_end_flush(); //关闭"curl_mulit"句柄 curl_multi_close($mh);
リクエストされた php ページをサーバー上に作成し、test.php という名前を付け、次の内容を記述しました
1 sleep(10); 2 echo 'seccess';exit;
は、10 秒待った後の次のステートメントを示します。
その後、コマンド ラインでプログラムを実行すると、結果は次のようになりました。
上記のコードでは、$ をループすることによって、curl_multi_getcontent が呼び出されます。データがあるかどうかをクエリするためのcurl_Arr配列。データがある場合は、$curl_Arr配列の要素数が0になるまで要素を出力、削除します。
このシミュレートされたマルチスレッド実装は、curl のcurl_multi シリーズの関数を使用してこの機能を実現します。この一連の機能の使い方の紹介については、Baiduでたくさん検索できます。ここでは説明を省略します。
以上がマルチスレッドリクエストをシミュレートするためにcurlを使用したPHPコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。