OpenPNEのディレクトリ構造に関して説明したいと思います。上のbinから行きたいと思います。開発版の最新のコードを見てやろうとおもいます。ブラウザでここ来てもらうと、binディレクトリとかlibディレクトリとかpublic_htmlとかが並んでいます。上からいってbinになります。この、binディレクトリというのが、中で何をやっているかと言うと中に入っているのはconfig.inc.phpとかmail.phpとか、tool_ashiato...と書いてあります。何のファイルが入っているかというと通常PHPというのはWEBブラウザからアクセスされてそれをPHPが処理をして、ブラウザに返事をするという形ですがそうではなくて、たとえばCRONであるとかLINUXのシステムであるCRONから呼ばれたりとかメールサーバから呼ばれたりとかといってブラウザ以外から呼ばれるプログラムがbinに入っています。binという呼び方にしてあります。大元のconfig.phpとの橋渡しをするために、ここから読みなさいよという書き方config.phpをrequireしてください、といった作法が入っています。次のmail.phpですね。mail.phpが何かというとこれが、携帯の写メール投稿や、プロフィール画像の変更、コミュニティの書き込みへの返事など、そう言った物を扱ってます。postfixとかsendmailとかqmailとかメールサーバにメールが届いたらこのプログラムにmail.phpに届いたメールを渡すような処理をしています。その渡されたメールをですね、この標準入力に渡せるのでこのプログラムが読みこなす。全部読んで、process_mailといって、メールのデータを処理にかけます。こちらにm_process_mailといって、処理系の関数があってこの中で、FROMが誰なのかな?これはSNSの登録者なのかな?これはプロフィール画像なのかな?日記投稿なのかな?コミュニティの書き込みなのかな?って判断をして最終的にメールの中身に入っている、メールの中の画像や本文などをOpenPNEの中の日記として書き込んだりしています。いうのがmail.phpの役割です。postfixとかsendmailとかメールサーバから呼ばれるプログラムです。この後ツール、とありますがtool_send_birthday_mailなどtool_dairy_newsなどこれらはすべてCRONから呼ばれます。RSSキャッシュは5分に1回OpenPNEに登録されているindex.rdfとかindex.xmlとか外部のブログを取得するのに使っています。birthday_mailとかdairy_mailは1日に1回起動して、誕生日7日前とか誕生日当日とかのメールを送ったり、dairy_newsといって、1日に1回ニュースを、あしあとの数とか最新日記の数とかを、送ったりとかする形で入っています。こちらのCRONは.cronと言うファイルと.phpというファイルが必ず対になって入っているが、通常cronは簡単で、cronファイルはcronを呼ぶのに向いている用に作られているが、直接読んでもかまわない。binディレクトリはこの辺です。ここの役割は、PHPブラウザから呼ばれるPHP以外で、メールサーバであったりCRONであったりから呼ばれるファイルが格納される場所になります。いて、libのディレクトリについての説明に入りたいと思います。libはOpenPNEディレクトリの直下にあります。この中のディレクトリに、includeとsmarty_pluginsとあります。OpenPNEが利用する外部のライブラリ、OpenPNEで作られたものではない外部のライブラリをここにまとめておくという形にしています。大きいのがincludeの中なんですけれども。これを開いてもらうと、いっぱい、AuthとかCacheとかCalendarとかCrypt、Date、DB、Date、HTTP、kcaptcha・・・・・・と入っています。ここがライブラリ群、OpenPNEの外にあるライブラリです。ほとんどがPEARのライブラリを使っています。中にはSmartyとか、PEARじゃないものも入っています。このあたりから外部のライブラリを呼んでいます。OpenPNEがデータベースに接続するためには、PearDBというライブラリを使っています。OpenPNEがログインをするための認証系は、Authというライブラリを使っています。このAuth内のContainerのに含まれる接続形態だったら、どんなものにも接続、スレーブできます。スレーブPNE機能と、ここに書いてありますけれど、OpenPNEだったら、ここに書かれているIMAPとかLDAPとか、こうしたディレクトリ、こういった認証方法に対応してスレーブPNEをすることができます。Sambaとか、RADIUSとかもです。libには、OpenPNEの使う外部のライブラリを同梱して入れてしまっているので、レンタルサーバーの環境がPEARに対応しているかどうかはあまり考えなくていい。インストールされているPEARは全く使わないで、OpenPNEの中に入っているincludeのファイルをなるべく使ってください、という形で、なるべく動きが違わないようにしています。それで、もう一個ディレクトリをのぼって次のところに行くと、smarty_pluginsっていうのがあります。Smartyっていうのは結構よくできてるテンプレートエンジンなんですけれど、そのSmartyをもうちょっと改造して、OpenPNEにとって使いやすくしています。これもOpenPNEとは関係ないライブラリとして置いてあります。libについてはこれくらいで。このOpenPNE直下のlibというのが、OpenPNEプロジェクトとは直接関係ないけれど、OpenPNEが利用しているライブラリです。間違いやすいのが、webappの下にもlibがあるってことです。webappの下にあるlibとは違いますので、ちょっと気をつけていただきたい。webappの下にあるlibは、OpenPNEが作ったOpenPNEで利用するプラグインやライブラリになっています。libは結構早いですね。