Version 15 (modified by 13 years ago) (diff) | ,
---|
ディレクトリツアー
解説:海老原
文:井本
概要
ここでは、OpenPNEのディレクトリのうち、特に主要なものをアルファベット順に解説していきます。
SourceForge?.netなどからダウンロードできるOpenPNEの圧縮ファイルを解凍したり、trac.openpne.jpでOpenPNEのtrunkを見てみると、以下のような構造になっているのがわかると思います。
bin/ lib/ public_html/ setup/ var/ webapp/ webapp_biz/ webapp_ext/ config.php.sample LICENSE
今回は、これらのディレクトリをひとつひとつ見て回ることにします。
ルートディレクトリ
各ディレクトリを見る前に、ルートディレクトリ(一番上の階層)について見ていきましょう。
- LICENSE - OpenPNEは現在PHPLicenseを採用しています。そのライセンス事項が書かれているのが、このファイルです
- config.php.sample - 設定ファイル(config.php)の編集前のファイルです。OpenPNEをセットアップするには、このconfig.php.sampleからconfig.phpをコピーし、config.phpのほうをコメントの内容に従って書き換える必要があります
ところで、WordPressやXOOPSなど、ほかの一般的なWEBアプリケーションのように、このディレクトリにはindex.phpがルートディレクトリに存在しません。これは、OpenPNEでは後ほど解説するpublic_htmlディレクトリのみをWEBサーバの公開領域に設置することを推奨しているためです(config.phpなどのファイルをWEBサーバの公開領域に設置してしまうと、サーバの設定などによってはファイルの中身(config.phpであればデータベースの接続情報など)が見られてしまったり、想定外のPHPスクリプトにアクセスされてしまうなど、セキュリティ上好ましくありません)。
WordPress Japan http://wordpress.xwd.jp/ XOOPS Cube日本サイト http://xoopscube.jp/
binディレクトリ(bin/)
config.inc.php mail.php tool_ashiato_update_log.cron tool_ashiato_update_log.php tool_rss_cache.cron tool_rss_cache.php tool_send_birthday_mail.cron tool_send_birthday_mail.php tool_send_daily_news.cron tool_send_daily_news.php tool_send_dairy_news.cron tool_send_mail_in_queue.cron tool_send_mail_in_queue.php tool_send_message_in_queue.cron tool_send_message_in_queue.php tool_send_schedule_mail.cron tool_send_schedule_mail.php tool_vacuum_exec.cron tool_vacuum_exec.php
このbinディレクトリはアプリケーションの動作には依存していなく、単体で動作するスクリプトが入っています。 binディレクトリの中には2種類のファイルタイプがあります。一つはcronで、もう一つはPHPです。 基本的にこのcronファイルは同名のPHPファイルと対になって存在しています。 PHPファイルは、実際に携帯の写メール投稿や、RSSの取得などの処理を行うファイルです。
このbinディレクトの中に、cronファイルとPHPファイルが対でない二つのファイルがあります。その二つのファイルとはconfig.inc.phpとmail.phpです。簡単にこの二つのファイルについて解説します。
まず、config.inc.phpのソースコードを見てみましょう。 ソースコードを見ると非常にシンプルで、root以下にある設定ファイルのconfig.phpを読み込む処理が書かれています。
config.inc.php <?php /** * @copyright 2005-2008 OpenPNE Project * @license http://www.php.net/license/3_01.txt PHP License 3.01 */ define('OPENPNE_DIR', realpath('../')); require_once OPENPNE_DIR . '/config.php'; ?>
次に、mail.phpを解説します。 mail.phpはcatch allというメールサーバの機能を利用してこのmail.phpにメールの本文を渡すことで動作しています。 mail.phpがメールの本文などを受け取ったら、mail.phpでメール本文を読み込み、それぞれの処理を判断しています。 このmail.phpはメールを受信したときに動作するので、対のcronファイルがありません。
lib
root/lib/ include/ smarty_plugins/ README.txt
それでは次に、rootディレクトリ直下にあるlibディレクトリを見ていきましょう。
このlibディレクトリの中には、includeディレクトリとsmarty_pluginsディレクトリがあります。このlibディレクトリには外部のライブラリが入っています。具体的にはPEARのライブラリなどが入っています。
このlib直下のREADME.txtにも書いていますが、このライブラリを使用する際に注意が必要です。OpenPNEはPHPライセンスですが、このlib直下のライブラリは必ずしもPHPライセンスではないので、使用する際には十分注意が必要です。
ただし、GPLなど縛りの強いライセンスは同梱していないので、PHPライセンスであれば使用可能です。
include
root/lib/include/ Auth/ Cache/ Calendar/ Crypt/ Date/ DB/ HTTP/ kcaptcha/ Log/ Mail/ Net/ PHP/ Services/ Smarty/ XML/ Auth.php Cache.php Date.php DB.php Etag.php Log.php Mail.php PEAR.php simplepie.inc Snoopy.class.php
このincludeディレクトリは、OpenPNEに欠かせない外部のライブラリが入っています。
このincludeディレクトリの特徴としては、このincludeディレクトリはインクルードパスに指定されているので、ライブラリ名を指定して読み込むだけで指定のライブラリを読み込むことができます。
このincludeディレクトリのライブラリ群を見ると、ほぼPEARのライブラリです。
このincludeディレクトリの中でも主要なディレクトリや特徴のあるライブラリについて解説していきます。
まず、一番上のAuthディレクトリですが、OpenPNEの認証系には欠かせないライブラリが入っています。
このAuthディレクトリの中でも、ContainerディレクトリはSlavePNEを実現するためのライブラリ群が入っています。SlavePNEはこのPEAR_Authを使用して実現しているので、どの認証系を使用することができるか知りたければ、この中のContainerディレクトリ内にあるファイルを見ると対応する認証を確認することができます。
root/lib/include/Auth/Container/ Array.php DB_osc.php DB.php DBLite.php File.php IMAP.php KADM5.php LDAP.php MDB.php MDB2.php Multiple.php PEAR.php POP3.php RADIUS.php SAP.php SMBPasswd.php SOAP.php SOAP5.php vpopmail.php
DBディレクトリもOpenPNEでは積極的に読み込んで使用しています。
OpenPNEはこのPEAR_DBに依存しているので、このライブラリ群がなければデータベースの操作はできません。
SmartyディレクトリはOpenPNEのテンプレートに使用しているテンプレートエンジンのライブラリ群が入っています。OpenPNEではこのSmartyに独自の拡張クラスを作成していますが、その拡張クラスのベースはこのincludeディレクトリ以下のSmartyディレクトリに入っています。
ファイルの中に、simplepie.incというファイルがあります。このファイルはRSS取得のためのライブラリです。
以前、OpenPNEはGPLライセンスというライセンス形態をとっていました。その時はRSS取得のためにMagpieRSSというライブラリを使用していました。しかし、MagpieRSSはGPLライセンスであるため、PHPライセンスにすることができませんでした。そこで、OpenPNE2.3.0にバージョンアップするときに、RSS取得のためのライブラリをMagpieRSSからこのsimplepieというライブラリに変更したという経緯があります。
PEAR http://pear.php.net/ Smarty http://www.smarty.net/ Simplepie http://simplepie.org/
smarty_plugins
root/lib/smarty_plugins/ modifier.date_format.php
このsmarty_pluginsディレクトリは先ほど説明したSmartyのプラグインのためのディレクトリです。 しかし、現状はmodifier.date_format.phpというファイルしか入っていません。 このファイルはSmartyで日付を扱う時に必要なので同梱しています。
pubic_html
root/public_html/ cmd/ css/ flash/ img/ js/ modules/ skin/ cap.php config.inc.php img_skin.php img.php index.php
それでは、Webサーバの公開領域であるpubic_htmlディレクトリを見ていきましょう。
このpubic_htmlディレクトリはWebサーバから読み込まれるディレクトリなのでCSSファイルやJavaScriptファイルなどがあります。詳しくは後ほど説明します。
また、このpubic_htmlは公開領域であるために注意が必要な場合があります。
このpubic_htmlディレクトリ以下のファイルはURLを直接入力された場合、ログインしていないユーザでもファイルを見ることができます。
例えば、会員のみに公開したい資料などをここに置いた場合、会員でない人がURLを直接入力してファイルにアクセスすれば、そのファイルを見ることができるのでこのディレクトリにファイルを置くときには注意が必要です。
このディレクトリにあるファイルを見ると、まずcap.phpがあります。このcap.phpはlib/includeディレクトリ以下にあるkcaptchaというライブラリを使用するためにあります。
kcaptchaライブラリは招待メールを送るときや、新規登録の際にコンピュータが判別しにくい崩れた人間しか読めない文字の画像を表示するために使用しています。
次に、img.phpとimg_skin.phpがあります。この2つのファイルはデータベースから画像ファイルを読み込むためにあります。ブラウザ側から直接Webサーバにアクセスすることができないので、このimg.phpとimg_skin.phpがブラウザとデータベースの橋渡となり、画像ファイルのやり取りをしています。
img.phpとimg_skin.phpの違いは、通常の画像であるか、スキン用の画像であるかという違いがあります。具体的には、認証の部分が違います。通常の画像はタイムスタンプがついていますが、テンプレートからスキン画像を読み込む場合はそれができないので、この様に2種類のファイルに分けて画像の受け渡しをしています。
最後に、index.phpというファイルがあります。OpenPNEでは、基本的にすべてこのindex.phpが読み込まれて処理が始まります。OpenPNEのフレームワークはフロントコントローラという形式をとっており、入り口はこのindex.php一つにまとめています。このindex.phpからすべての処理が始まります。
このindex.phpを見てみると非常にシンプルなソースコードになっています。
openpne_executeという関数がありますが、これはOpenPNEのコントローラを実行する関数です。このopenpne_executeにURLから受け取ったパラメータを渡してそれぞれのパラメータから処理を判断して実行しています。
index.php <?php /** * @copyright 2005-2008 OpenPNE Project * @license http://www.php.net/license/3_01.txt PHP License 3.01 */ require_once './config.inc.php'; require_once OPENPNE_WEBAPP_DIR . '/init.inc'; openpne_execute(); ?>
cmd
root/public_html/cmd/ amazon.co.jp.js blog-apart.com.js blogcruiser.js docune.jp.js flipclip.net.js grouper.com.js jp.youtube.com.js kakaku.com.js livlyisland.js maps.google.co.jp.js maps.google.com.js postpet.js ppw.js r.gnavi.co.jp.js r.gnavi.co.jp.js.2 r.tabelog.com.js slurl.com.js sns_info.js sonetphoto.js tagfriends.js video.google.com.js vote.nifty.com.js wajju.jp.js watchme.js www.amazon.co.jp.js www.blog-apart.com.js www.ebitv.jp.js www.flipclip.net.js www.google.co.jp.js www.google.com.js www.grouper.com.js www.netprice.co.jp.js www.nicovideo.jp.js www.wajju.jp.js www.watchme.tv.js www.youtube.com.js youtube.com.js youtube.js
このcmdディレクトリは、OpenPNEの目玉機能でもある小窓機能を実現するためのJavaScriptは入っています。小窓には通常小窓形式(CMDタグ)、URL2CMD形式(URL)と2つの形式がありますが、どちらの形式で小窓が使用されても、このcmdディレクトリにあるJavaScriptが読み込まれます。
このcmdディレクトリにあるファイルはすべてJavaScriptです。そのため、Webサーバから読み込むことが出来る必要があるため公開ディレクトリに存在します。
cmdディレクトリにあるJavaScriptファイルの特長としては、ファイル名が「ドメイン名+.js」となっているところです。これは小窓の規約に「使用するドメインに「.js」をつけるという」とうのがあるためです。
css
このcssディレクトリには、OpenPNEのスタイルシートが入っています。
OpenPNEのデザインに関わるCSSは基本的に、すべてこのcssディレクトリに入っています。しかし、現状は動的に書き出す必要がある配色設定などはテンプレートに直接書いています。
動的に書き出す必要がないフォントの大きさなどのCSSはこのcssディレクトリに入っています。
root/public_html/css/ main/ default.css
root/public_html/css/main/ commons.css font.css inc_info.css inc_navi.css inc_page_footer.css inc_page_header.css inc_search_box.css mainframe.css page_login.css
flash
root/public_html/flash/ list.swf
次はflashディレクトリです。
ここにはflashファイルが入っています。しかし、このflashディレクトリには現在一つしかファイルがありません。現在あるファイルはフレンドリストをFlashで表示するという機能のソースです。このflashのソースも公開してますので、これを再編集してオリジナルのフレンドリストを作ることも可能です。
Flashの使い方 http://trac.openpne.jp/wiki/FlashHowTo
img
root/public_html/img/ gif/ jpg/ png/ .htaccess index.php
次はimgディレクトリです。このimgディレクトリはデフォルトの設定では使いません。
この機能を使うときは、config.phpで設定します。
【OPENPNE_IMG_CACHE_PUBLIC】をtrueに書き換える必要があります。
このOPENPNE_IMG_CACHE_PUBLICをデフォルトでtrueにしていない理由としては、画像キャッシュをpublic_html以下に置くためにはmod_rewriteが必要だからです。 mod_rewriteに対応していないレンタルサーバでも動くように、OPENPNE_IMG_CACHE_PUBLICをデフォルトでfalseにしています。
root/config.php // 画像キャッシュをpublic_html以下に置くかどうか(要mod_rewrite) define('OPENPNE_IMG_CACHE_PUBLIC', true);
画像の一時ファイルをvarディレクトリに入れるのではなくpublic_htmlに公開することで、ブラウザが直接アクセスできるようになるため、OpenPNEのパフォーマンスが上がります。
imgディレクトリの中には、画像の形式ごとにディレクトリ分けされています。
また、画像の大きさが決まっているので、画像の大きさごとに各ディレクトリにキャッシュされます。
root/public_html/img/gif/ w_h/ w_h_raw/ w120_h120/ w180_h180/ w240_h320/ w76_h76/
js
root/public_html/js/ pne.js prototype.js show_flash.js
このjsディレクトリにもcmdディレクトリと同じく、JavaScriptファイルが入っています。OpenPNEには小窓以外にもJavaScriptが使われています、
pne.jsはURL2CMDを実現するために必要なJavaScriptファイルです。
prototype.jsはフォーム入力欄のフォーカス契機で色を変えるというものに使っていました。現在は使用していませんが、今後使用する可能性が高いためこのライブラリを残しています。
show_flash.jsはフレンドリストをFlashで表示するために必要なJavaScriptファイルです。
OpenPNEでは基本的にJavaScriptを使っておらず、あくまで補助的なものとして使用しています。
modules
root/public_html/modules/ admin/ pc/ setup/
このmodulesディレクトリには、admin、pc、setupと各モジュールごとに必要なファイルが入っています。例えば、adminディレクトリでは、管理画面のCSSや管理画面のボタンが入っています。
pcディレクトリは現在空のディレクトリです。
setupディレクトリはsetupに必要なCSSが入っています。
skin
root/public_html/skin/ 001_openpne_red/ 002_openpne_beige/ 003_openpne_yellow/ 004_openpne_green/ 005_openpne_blue/ 006_openpne_navy/ 007_openpne_purple/ 900_openpne_ver28/ default/ dummy.gif
このskinディレクトリはOpenPNE2.10系から大きく構成が変更されたディレクトリです。
OpenPNE2.10系から、ヘッダーやナビメニューなどのスキン画像をプリセットカラーから選択出来る機能が追加されました。
上から、レッド、ベージュ、イエロー、グリーン、ブルー、ネイビー、パープル用のディレクトリがあります。その下にある900_openpne_ver28ディレクトリはOpenPNE2.8系で使用されていたスキン画像は入っています。
001_openpne_redディレクトリの中を見ると、imgディレクトリとskin.iniファイルがあります。
root/public_html/skin/001_openpne_red/ img/ skin.ini
このskin.iniファイルは管理画面から読み込まれる設定ファイルです。
captionで指定した名前が管理画面から読み込まれて表示されています。
root/public_html/skin/001_openpne_red/skin.ini [skin] caption = "OpenPNEレッド"
次に、imgディレクトリを見てみましょう。このimgディレクトリにはOpenPNEレッドに必要な画像しか入っていません。具体的には、ヘッダーやナビやログイン画面の画像などです。つまり、ボタン画像やアイコンは入っていません。
001_openpne_redディレクトリにはない、ボタン画像やアイコンはskinディレクトリ以下のdefaultディレクトリが読み込まれています。同名のファイル名がない場合は、defaultディレクトリの画像が使用されます。
root/public_html/skin/001_openpne_red/img/ skin_after_header_2.jpg skin_after_header.jpg skin_before_header.jpg skin_login_open.jpg skin_login.jpg skin_navi_c_2.jpg skin_navi_c.jpg skin_navi_f_2.jpg skin_navi_f.jpg skin_navi_h_2.jpg skin_navi_h.jpg
setup
root/setup/ script/ sql/ OpenPNE_Setup_mybox.html OpenPNE_Setup_pgsql.html OpenPNE_Setup.html OpenPNE_Upgrade.html
このsetupディレクトリにはセットアップに必要なファイルとOpenPNEのマニュアルが入っています。
PostgreSQLを使う場合はOpenPNE_Setup_pgsql.htmlを参照してください。
その他にも、アップグレードのマニュアルもあるので安定版から安定版にアップグレードする場合は、OpenPNE_Upgrade.htmlを参照してアップグレードしてください。
それではscriptディレクトリを見ていきましょう。
script
root/setup/script/ update/ upgrade/
scriptディレクトリですが、このディレクトリには現状は何も入っていません。2.10からこのscriptディレクトリが追加されました。
OpenPNE2.10で固体識別番号という大きな機能追加を行ったのですが、その時にはこのディレクトリにはPHPファイルが入っていました。
この様に大きな機能追加などが行われたときにはこのscriptディレクトリにファイルが入る可能性があります。
sql
root/setup/sql/ mysql40/ mysql41/ postgres74/ README.txt
次に、sqlディレクトリをみていきましょう。このsqlディレクトリには基本的にSQLファイルが入っています。OpenPNEは原則として画像などもデータベースに保存しているためバージョンアップの時もこのSQLを実行するだけでバージョンアップをすることができます。
基本的にはどのディレクトリも同じ構造なので、今回はOpenPNEが推奨しているMySQL4.1系のディレクトリについて詳しく見ていきましょう。
root/setup/sql/mysql41/ install/ option/ update/ upgrade/
mysql41ディレクトリにはinstall、option、update、upgradeのそれぞれの用途に合わせたSQLファイルが入っています。
installディレクトリにはOpenPNEを新規にインストールするためのSQLが入っています。
optionディレクトリには、OpenPNEの動作に必須ではないSQLが入っています。例えば、add_c_api.sqlはOpenPNEの動作には直接関係していません。つまり実行しなくてもOpenPNEは動作します。
しかし、OpenPNEのAPIを使用する場合にはこのadd_c_api.sqlを実行する必要があります。sqlディレクトリにあるREADME.txtの「用途」の欄を見ればoptionディレクトリにあるSQLの説明があります。
updateには、OpenPNE2.9.1から2.9.2、2.9.2から2.9.3っていう形で、開発版のバージョンを上げるためのSQLが入っています。主に開発者や最新の動向を追いたい人が使用するSQLです。
upgradeには2.6から2.8、2.8から2.10という形で、大きくバージョンが上がるときに使います。通常SNSのバージョンをあげたい場合はのupgradeを使います。
また、各ディレクトリのSQLには大きく分けて2種類あります。create_tablesというテーブルを作るSQLとinsert_dataという初期設定値のデータを挿入するSQLがあります。 この2種類のSQLを実行することで、OpenPNEを動作させることが出来ます。
var
root/var/ function_cache/ img_cache/ log/ rss_cache/ templates_c/ tmp/
このvarディレクトリには基本的には一時的なファイル、一時的なデータが入ります。よって、OpenPNEをダウンロードして展開した状態だと空の状態です。
OpenPNEはデータはデータベースに置くという方針で開発しています。しかし、毎回データベースに接続して読み込んでいると表示速度が遅くなるので、一度データベースから読み込んだファイルはこのvarディレクトリにキャッシュとして置いておきます。
キャッシュすることで、毎回データベースにデータを読み込みに行く必要がなくなるのでパフォーマンスが向上します。
varディレクトリを詳しく見ていきましょう。
まず一番上にfunction_cacheディレクトリがあります。このfunction_cacheディレクトリは、 負荷のかかる処理などをキャッシュするために存在します。
例えば、OpenPNEにはランキング機能がありますが、このランキングを集計するのは非常に時間がかかります。しかも、ランキングは一日に一回しか計算しません。ですので、あらかじめ計算しておいて、このfunction_cacheディレクトリに置いています。このように、計算の難しいことや時間のかかることは一回計算した結果をこのfunction_cacheディレクトリに置いておきます。そして、二回目からはデータベースを読み込まないで、ファイルを読み込んで計算結果を出力しています。
次に、img_cacheディレクトリです。このimg_cacheディレクトリは日記やプロフィールなどの画像をキャッシュするために存在します。この img_cacheディレクトリを見ると、まずは拡張子別で分かれていて、次に高さ・幅、サイズ別に分かれています。サイズを分けてキャッシュをとることによって性能が劣化するのを避けています。
public_htmlにも画像をキャッシュするディレクトリがありますが、config.phpで設定していない場合は通常このvarディレクトリ以下のimg_cacheディレクトリに画像がキャッシュされます。
次に、logディレクトリです。このlogディレクトリにはエラーログやメールの実行ログなどを記録するために存在します。logを有効にするためには、config.phpで設定が必要で、OPENPNE_DEBUGGINGを0にする必要があります。
root/config.php //--- オプション設定 // デバッグモード // 0: off ... エラー非表示、エラーログを記録する // 1: on ... エラー表示、エラーログを記録しない // 2: on ... 1 + Smartyデバッグコンソール define('OPENPNE_DEBUGGING', 0);
次に、rss_cacheディレクトリです。rss_cacheディレクトリには外部ブログを取り込んだ結果を置いておきます。負荷対策のために、外部ブログのRSSもキャッシュしています。
次に、templates_cディレクトリです。templates_cディレクトリにはSmartyのテンプレートを一度解析して、解析の結果を一時ファイルとして置いています。Smartyのテンプレートもキャッシュをここに置いておくことで次に読み込まれるときに、このキャッシュを読み込むので、一回目にアクセスしたときより速く表示できます。
最後に、tmpディレクトリです。tmpディレクトリには一時画像や一時ファイルを保存しておく場所として存在します。 メールで画像を投稿するときに、チェックするために画像を保存する必要があり、一時的にこのtmpディレクトリに保存しています。
webapp
root/webapp/ lib/ modules/ templates/ validate/ init.inc version.php
このwebappディレクトリがOpenPNEの根幹です。OpenPNEのアクションファイルなどはこのwebappディレクトリに入っています。
libディレクトリ、modulesディレクトリ、templatesディレクトリ、validateディレクトリの各ディレクトリについてはこの後詳しく見ていきます。
このディレクトリには2つのファイルがあります。
まず、init.incですがOpenPNEはconfigの後にこのファイルを読み込みます。このファイルにはOpenPNEのフレームワークの設定が書かれています。
version.phpはOpenPNEのバージョンを定義しているファイルです。
lib
root/webapp/lib/ Auth/ Cache/ color/ db/ mail/ OpenPNE/ smarty_plugins/ util/ auth.inc controller.php db.inc.php ktaiIP.php OP.php util.inc.php
それではlibディレクトリを見ていきましょう。libディレクトリはincludeディレクトリにもありますが、この2つのディレクトリには大きな違いがあります。
includeディレクトリ以下のライブラリは外部のライブラリで、このwebappディレクトリ以下のディレクトリはOpenPNEプロジェクトで開発されたライブラリです。includeディレクトリ以下のlibディレクトリ解説の時にライセンスが違うことがあるので注意が必要と書きましたが、このwebappディレクトリ以下のlibはOpenPNEプロジェクトで開発されたものなのですべてPHPライセンスです。
libディレクトリにはいくつかファイルがあります。その中でcontroller.phpというファイルがありますが、この中でOpenPNEのメインの処理を行っています。まずはじめに公開領域であるpubic_html以下のindex.phpが読み込まれたら、このcontroller.phpファイルの中のopenpne_executeという関数が実行されて、使用するモジュールなどを判断しています。
それでは主要なディレクトリについて詳しく見てみましょう。
db
root/webapp/lib/db/ action.php api.php ashiato.php banner.php bookmark.php common.php commu.php deprecated_lib.php diary.php etc.php file.php friend.php image.php member.php message.php point.php ranking.php review.php rss.php schedule.php
OpenPNEではこのdbディレクトリ以下のファイルにある関数を頻繁に使用しています。
例えば、メンバーのidを取得したい場合、member.phpファイル内のdb_member_c_member4c_member_idという関数を呼ぶと、指定したメンバーの情報が取得出来ます。
root/webapp/lib/db/member.php . . . function db_member_c_member4c_member_id($c_member_id, $is_secure = false, $with_profile = false, $public_flag = 'public') { static $is_recurred = false; //再帰処理中かどうかの判定フラグ if (!$is_recurred) { //function cacheのために再帰処理を行う $is_recurred = true; $funcargs = func_get_args(); return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs); } . . .
OpenPNE
このOpenPNEディレクトリにはOpenPNEが使っているクラスライブラリが入っています。例えば、Smarty.phpはsmartyの派生クラスであるOpenPNE_Smartyというクラスを定義しています。ここではOpenPNE独自の処理を施しています。
そのほかにも、さまざまな派生クラスが定義されています。
color
colorディレクトリには配色設定をしているファイルが入っています。
このディレクトリはktaiディレクトリとpcディレクトリに分けてプリセットカラーが定義されています。
pcディレクトリには各プリセットカラーの配色設定が定義されています。
同じフォーマットで新たに定義ファイルを追加すると、プリセットカラーとして管理画面から選択できるようになります。
root/webapp/lib/color/pc/ 001_red.ini 002_beige.ini 003_yellow.ini 004_green.ini 005_blue.ini 006_navy.ini 007_purple.ini
smarty_plugins
このsmarty_pluginsディレクトリには、OpenPNEプロジェクトが作ったSmartyのプラグインが入っています。
中でも、function.t_url.phpというプラグインはOpenPNE独特のプラグインです。
OpenPNEは、SSLを使用することがあるので、アクションによってはURLが変わることがあります。そのため、Smartyプラグインを使ってSmartyでURLを生成しています。
その他にも、CMDタグを小窓にするfunction.t_cmd.phpや、絵文字を変換するためのoutputfilter.pne_display_emoji.phpなどもあります。
root/webapp/lib/smarty_plugins/ block.t_loop.php function.ext_include.php function.t_assign_rss.php function.t_form.php function.t_img_url_skin.php function.t_img_url.php function.t_url_mail.php function.t_url.php modifier.t_cmd.php modifier.t_escape.php modifier.t_implode.php modifier.t_truncate.php modifier.t_url2a_ktai.php modifier.t_url2a.php modifier.t_url2cmd.php modifier.to_sjis.php outputfilter.pne_display_emoji.php resource.db.php
modules
root/webapp/modules/ admin/ api/ ktai/ pc/ setup/
modulesディレクトリには、管理画面からSNSの情報を変更をする、日記を読む、メッセージを送るなど、何らかの動作をするためのファイルがこの中には入っています。OpenPNEでの動作プログラムはほぼこのmodulesディレクトリの中にあります。
基本的には構造は同じなのでpcディレクトリを見ながら詳しく解説していきます。
pc
このpcディレクトリはdo、page、templates、validateと4つのディレクトリとinit.incの一つのファイルで構成されています。
基本的にこの構造で構成されています。
root/webapp/modules/pc/ do/ page/ templates/ validate/ init.inc
do
このdoディレクトリには、実行系の処理をするファイルが入っています。 このdoディレクトリを見ると、データベースに追加、削除などの処理をしています。フォームにはdo系の関数が使われることが多いことも特徴です。
page
このpageディレクトリにはページを表示するために必要なファイルが入っています。
このpageの特徴としてはそのファイル名がそのままURLに使用されている点です。
templates
templatesディレクトリにはテンプレートが入っています。
page系と対になって存在するテンプレートが多いのが特徴です。しかし、同じpageでも一つのテンプレートを使っていることもあります。例えば、プロフィール確認と友人のホームというのは同じテンプレートを使用しています。
validate
validateディレクトリには入力値のチェックのためのファイルが入っています。
例えば、c_member_idは1や2などの数値ですが、aなどの文字列が変数として渡された時にプログラムが予期せぬ動作を起こすことがあるかもしれません。そのような予期せぬ動作を未然に防ぐために、あらかじめ変数の値をチェックをしています。
このvalidateディレクトリの中でもdoとpageに分かれており、どちらも変数の入力値をチェックしています。
root/webapp/modules/pc/validate/ do/ page/
templates
root/webapp/templates/ mail/ debug.tpl error.tpl
このtemplatesディレクトリにはOpenPNEのすべてのモジュールから使用できるテンプレートが入っています。
一番上のmailディレクトリには、メールのテンプレートが入っています。このテンプレートの中に変数があり、その変数に値を渡してメールを送信しています。
次に、debug.tplはconfig.phpでOPENPNE_DEBUGGINGを2にしたときに出力されるデバッグコンソールのテンプレートです。
最後に、error.tplというのがありますが、OpenPNEではエラーやメンテナンス画面はこのerror.tplを使って表示しています。
webapp_biz
webapp_bizディレクトリにはOpenPNEのBIZモジュールが入っています。
基本的なディレクトリの構造はwebappと同じ構造をしています。
BIZ機能を使用するときはまずこのwebapp_bizが読み込まれ、もしアクションファイルが存在しない場合は、webappのアクションファイルを読み込みます。
root/webapp_biz/modules/ admin_biz/ biz/ ktai/ ktai_biz/ pc/
webapp_ext
root/webapp_ext/modules/ admin/ ktai/ pc/
このwebapp_extディレクトリは拡張用のディレクトリです。
新しい機能を追加や拡張する時のために用意されているもので、デフォルトでは空のディレクトリです。
何らかの機能を追加したい場合、直接ファイルを書き換えるということも可能ですが、バージョンアップに追従できないというデメリットがあります。
実際に、このwebapp_extディレクトリを使用して機能を拡張する場合は、webapp_bizディレクトリが参考になると思います。
webapp_extディレクトリを使用する場合は、config.phpで【USE_EXT_DIR】をtrueにする必要があります。このUSE_EXT_DIRをtrueにすることによって、まずwebapp_extディレクトリが読み込まれ、もしアクションファイルが存在しない場合は、webappのアクションファイルを読み込みます。
root/config.php // webapp_ext ディレクトリ使用設定 /// define('USE_EXT_DIR', true); define('OPENPNE_WEBAPP_EXT_DIR' , OPENPNE_DIR . '/webapp_ext'); define('OPENPNE_MODULES_EXT_DIR', OPENPNE_WEBAPP_EXT_DIR . '/modules');
ただし、webapp_extディレクトリを使用して開発する場合にいくつか注意が必要です。
一つ目は「アクションファイルを追加してもvalidateで変数の値をチェックする必要」で、二つ目は「do系のアクションを追加する場合はセッションIDのハッシュ値が必要」です。
まず、「アクションファイルを追加してもvalidateで変数の値をチェックする必要」の解説をします。例えば、do系でプログラムを追加するとします。そのプログラムの中で、変数のやり取りをしていた場合、validate以下のpcに「アクション名.ini」というファイルを追加しなければいけません。
次に、「do系のアクションを追加する場合はセッションIDのハッシュ値が必要」の解説をします。do系のアクションはクロスサイトリクエストフォージェリ対策(CSRF)防止のためにセッションIDのハッシュ値をリクエストの中に含めなければいけません。
OpenPNE内のフォームなどの場合は以下のような形でセッションIDのハッシュ値をリクエストの中に含めています。
<input type="hidden" name="sessid" value="({$PHPSESSID})">