Version 10 (modified by 15 years ago) (diff) | ,
---|
ディレクトリツアー
解説:海老原
文:井本
概要
OpenPNEディベロッパーガイドのはじめはディレクトリツアーということで、OpenPNEのディレクトリ構造を見ていきます。
現在のOpenPNE2.0系では独自のフレームワークを採用しています。
よってディレクトリ構造も独自の構成をしています。
今回は、trac.openpne.jpのtrunkを参照しながら解説を行っていきますのでディレクトリはアルファベット順になっているので、解説も上からアルファベット順に解説していきます。
それでは、主要なディレクトリを網羅しながら、OpenPNEのディレクトリを見ていきましょう。
OpenPNE trunk http://trac.openpne.jp/browser/OpenPNE/trunk
root
root/ bin lib public_html setup var webapp webapp_biz webapp_ext config.php.sample LICENSE
まずはじめに、rootディレクトリです。
このrootディレクトリはOpenPNEのディレクトリの中で一番上の階層です。
OpenPNEをダウンロードして解凍したり、trac.openpne.jpのtrunkをみるとこのような構造になっていると思います。
ここには、いろいろなディレクトリがあります。それぞれディレクトリについて後ほど詳しく解説するのでここでは割愛します。
このrootディレクトリにはその他に、2つのファイルがあります。一つがconfig.php.sampleという設定ファイルです。もう一つはLICENSEファイルです。
簡単に2つのファイルについて説明すると、config.php.sampleは通常config.phpとリネームしてOpenPNEの設定ファイルとして使用します。この設定ファイルには、データベースの設定から、OpenPNEのAPI設定までさまざまな設定項目があります。詳しくは、実際にconfig.php.sampleを開いてどのような項目があるか確認してみてください。
このrootディレクトリの特徴としては、WordPressやXOOPSのように、rootディレクトリにphpファイルが多くないことが特徴です。また、index.phpがこのディレクトリにないのも特徴です。これは、公開ディレクトリを、後ほど説明するpubic_htmlだけに限定しているため、このrootディレクトリはWEBサーバの公開範囲外なので、index.phpがないという特徴を持っています。 それではまず、binディレクトリから詳しく見ていこうと思います。
WordPress Japan http://wordpress.xwd.jp/ XOOPS Cube日本サイト http://xoopscube.jp/
bin
root/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ファイルと対になって存在しています。 もう一つは、実際に携帯の写メール投稿や、RSSの取得などの処理を行うPHPファイルです。
この中に、cronとPHPファイルが対でないファイルが2つあります。その2つのファイルととはconfig.inc.phpとmail.phpです。簡単にこの2つのファイルについて解説します。
まず、config.inc.phpは中を見ると分かりますが、root以下にあるconfig.phpを読み込む処理が書いています。 このconfig.inc.phpはそれぞれ単体で動くスクリプトにOpenPNEの設定やパスを教えるためのものです。
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ですが、これはcatch allというメールサーバの機能を利用してこのmail.phpにメールの本文を渡すことで動作しています。 mail.phpがメールの本文などを受け取ったら、このmail.phpでメール本文を読み込み、それぞれの処理を判断しています。 このmail.phpはメールを受信したときに動作するので、対のcronファイルがないということになります。
lib
root/lib/ include smarty_plugins README.txt
それでは次に、rootディレクトリ直下にあるlibディレクトリを見ていきましょう。
このlibディレクトリの中には、includeディレクトリとincludeディレクトリがあります。このlibディレクトリには外部のライブラリが入っています。具体的にはPEARなどが入っています。
このlib直下のREADME.txtにも書いていますが、いくつか注意が必要なことがあります。
OpenPNEはPHPライセンスですが、このlib直下のライブラリは必ずしもPHPライセンスではないということです。ですので、使用する際には十分注意が必要です。
ただし、あくまで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のライブラリです。
この中でも主要なディレクトリや特徴のあるライブラリについて解説していきます。
まず、一番上の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というファイルがあります。
OpenPNEは現在のPHPライセンスにする前はGPLライセンスというライセンス形態をとっており、RSS取得のためのライブラリはMagpieRSSを使っていたのですが、MagpieRSSがGPLライセンスなので、PHPライセンスにすることが出来ませんでした。そこで、OpenPNE2.3.0にするときに、この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やjsなどがあります。詳しくは後ほど説明します。
また、このpubic_htmlは公開領域であるために注意が必要な場合があります。
このpubic_htmlディレクトリ以下のファイルはURLを直接入力された場合は誰でも見ることが出来るという特徴があります。
例えlば、会員のみに公開したい資料などをここに置いた場合でも、会員でない人が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から受け取ったパラメータを渡してそれぞれのパラメータから処理を判断して実行しています。
<?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のスタイルシートが入っています。
基本的には、すべてこの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ディレクトリには現在1つしかファイルがありません。現在あるファイルはフレンドリストを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が必要でだからです。
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
このsetupディレクトリにはセットアップに必要なファイルとOpenPNEのマニュアルが入っています。
PostgreSQLを使う場合はOpenPNE_Setup_pgsql.htmlを見てください。
そのほかにも、アップグレードのマニュアルもあるので安定版から安定版にアップグレードしたいときは、OpenPNE_Upgrade.htmlを見てアップグレードを進めてください。
それではscriptディレクトリから見ていきましょう。
root/setup/ script sql OpenPNE_Setup_mybox.html OpenPNE_Setup_pgsql.html OpenPNE_Setup.html OpenPNE_Upgrade.html
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ファイルが入っています。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の説明があります。
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が変わることがあります。ですので、テンプレートに直接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})">
まとめ