- ベストアンサー
PHPでDropbox APIを使用して画像の並列アップロードをする方法
- この記事では、PHPを使用してDropbox APIを利用し、画像の並列アップロードを行う方法について説明します。
- LAMP環境の開発サーバでPHPのバージョン5.3.29を使用しており、Dropbox APIはcomposerを使用して導入されています。
- 具体的なコード例を示しながら、3枚の画像を同時にアップロードするための並列処理の方法について解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
cURLの非同期処理を楽に書くためのライブラリを作ってみました. (まだほとんどテスト出来てないのでバグがある可能性はあります) https://github.com/mpyw/co http://qiita.com/mpyw/items/44a001101914450257dc 「非同期処理の部分的な直列化」を行うためにはPHP5.5以降から使えるジェネレータがほぼ必須ですが,全部並列に行うだけならPHP5.3から使えます. $results = Co::wait([$curl1, $curl2, $curl3]); これだけですね.既定ではどれか1つが失敗するとCURLExceptionをスローしますが,失敗時にcURLリソースをCURLExceptionに置換する例外安全なモードで使うことも出来ます. 問題はSDKを使っていることですね.SDKが生成するリクエストオブジェクトのようなものから何とかcURLリソースだけを引っ張り出せればどうにでもなるんですが,SDK自体を改造する,あるいは自分で認証なども含めてフルスクラッチする,ぐらいしないと厳しいでしょうか… 全く別のアプローチとして,単一のファイルだけをアップロードするスクリプトをBasic認証かDigest認証あたりをつけて置いておき,自分自身のサーバに対して並列にHTTPリクエストを飛ばして処理させる,という方法もあります.並列化はPHPではなくWebサーバの仕事になるので,こちらであればSDKをそのまま流用できますね.
その他の回答 (1)
- t_ohta
- ベストアンサー率38% (5241/13712)
PHPは元々並列処理に対応していません。 pthreads の Thread クラスを使えば並列処理が可能ですが、CLI で動作させなきゃいけないなどの制約があります。 http://php.net/manual/ja/book.pthreads.php
お礼
t_ohta様 早速ご回答いただきまして、ありがとうございます。 CLIで動作させないと並列処理ができないとのことで、承知致しました。 プログラムの実行時間を短縮できればと思っておりますので、curl等を使った疑似的な並列処理につきまして、ご回答いただけますと幸いです。 以上、よろしくお願い致します。
お礼
To_aru_User様 お返事が遅くなってしまいまして、大変失礼致しました。 ライブラリを作成いただきまして、ありがとうございます。 githubより拝見させていただきました。 私がまだ未熟なため、ライブラリを上手く使用できるか分かりませんが、後ほど色々と試させていただきたいと思います。 ご丁寧なご対応をいただきまして、非常に助かりました。