curl_multiでhttpアクセスを並列化2013年03月12日PHPhttpアクセスを並列化するには今作っているのは自作アプリ用のwebサービス。メインのphpのページから、同じドメイン内の20以上のphpファイルにアクセスする必要があります。それぞれのphp内では外のサイトのデータを取得して解析するので、ものによっては実行完了までに数十秒かかります。全てのphpへのアクセスを直列で行うのでは全体が完了するまでにかなりの時間を要するので、並列処理することにしました。いってもphpは初心者なので、、、スレッドを生成するにはどうすればよいのか調べてみるとcrul_multiという関数群を使えば並列処理ができるということがわかりました。Manualcurl_multi参考サイトcurl_multiを使った並列処理はあちらこちらで解説されているので、ほぼコピペで動かせそうなのもよいところです。技術ブログこの辺を参考にして実際に動かしてみました。実行時間については期待した通り、全体の処理時間がボトルネックになるphpの処理時間+αくらいになりました。計20ファイルに並列にアクセスするとそのうち1ファイルにエラーが発生することが頻繁に起こりました。URLの配列を並べ替えて実行してみると、今度は異なるファイルにエラーが頻発します。エラーになるというわけでもない。どこかに上限があるのかと、phpinfoで調べてみてmax_file_uploadsの値が20になっていたので、試しに40に変更してみましたが効果なし。調べてみましたが、私には原因が特定できず。レンタルサーバーなので、どこかで制限をかけているのでしょうか?結局原因の特定を諦め、処理時間は伸びてしまうのですが10ファイルずつの並列処理を2回にわけて行い、最後に結果を結合させることで回避しました。このブログを読んで原因が分かる方がいらっしゃいましたら教えて下さい。