[PHP-users 29005] Re: curl関数によるデータ収集について
Reiji Matsumoto
matsumoto @ spline.oc.to
2006年 4月 15日 (土) 07:29:42 JST
松本です。
> curl_execを行うごとに、initとcloseが実行されていると思われます。
そうですか。では、私が以前ハマった所の件は関係なさそうですね。
curlに関係する部分に限らず、何か未知のバグやあるいは理解しにくい仕様
のために、ある条件が重なった時、動作しなくなっている可能性があります。
長時間動作するプログラムを安定させるのは難しいですね。
phpに限った事では無く、例えばapache等でも一定条件でプロセスを終了さ
せて、新しいプロセスを起動させる仕組み等が用意されています。この
ような仕組みで未知のバグにも対抗できるわけです。
問題点を追及するのが理想なのは言うまでもないですが、現実的な納期で
不可能な場合もあります。
ですので、長時間実行し続けるシステムではプロセスを複数立ち上げて、
問題のあるプロセスは終了させて新しいプロセスを起動させるような仕組みが、
必要だと思います。たったひとつのプロセスにすべての責任を押しつける
のは、スクリプト言語のプログラムには酷だと思います。
このような仕組みを実装して運用しながら、ログから得られた情報から
根本的な問題を解決していくというような開発、運用が現実的かも知れ
ません。受託の場合だとしたら、保守の手間が思った以上にかかる可能
性を考慮して契約や見積りを行った方がよいかも知れません。
> 実は、サーバー側に何か関係しているのでしょうか?
> そうだとすれば、どのような回避策が考えられますでしょうか?
本件はWEBクローラの一種だと思いますが、相手先サーバーの運営者は
中村さんと契約関係にありますでしょうか。互いに了承した上で行っている
なら問題ないと思いますが、そうでない場合、相手先サーバーのrobot.txt
を遵守する必要がありますし、robot.txtが無くても短時間での大量リク
エストは控えるべきです。契約関係に無い所からの大量リクエストが
あると、サーバー管理者は警戒します。この場合、通信を遮断される可能
性はもちろんの事、警告的パケットや報復的パケットを送られている可
能性もあります。報復的パケットの中にはクライアント側の動作を不安
定にさせる物も、もちろんあります。
そうではなく相手先もご自分で管理されているのでしたら、サーバー側
のログも参照してみるとよいかも知れませんね。
PHP-users メーリングリストの案内