wiki:pne-book-9-1
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Version 2 (modified by imoto, 11 years ago) (diff)

--

ディレクトリツアー

概要

OpenPNEディベロッパーガイドのはじめはディレクトリツアーということで、OpenPNEのディレクトリ構造を見ていきます。

現在のOpenPNE2.0系では独自のフレームワークを採用しています。 よってディレクトリ構造も独自の構成をしています。

今回は、trac.openpne.jpのtrunkを参照しながら解説を行っていきますのでディレクトリはアルファベット順になっているので、解説も上からアルファベット順に解説していきます。

それでは、主要なディレクトリを網羅しながら、OpenPNEのディレクトリを見ていきましょう。

root/OpenPNE/trunk
http://trac.openpne.jp/browser/OpenPNE/trunk

root

まずはじめに、rootディレクトリです。 このrootディレクトリはOpenPNEのディレクトリの中で一番上の階層です。 OpenPNEをダウンロードして解凍したり、trac.openpne.jpのtrunkをみるとこのような構造になっていると思います。 ここには、いろいろなディレクトリがあります。それぞれディレクトリについて後ほど詳しく解説するのでここでは割愛します。

root

bin
lib
public_html
setup
var
webapp
webapp_biz
webapp_ext
config.php.sample
LICENSE

この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

このbinディレクトリはアプリケーションの動作には依存していない、単体で動作するスクリプトが入っています。 binの中には2種類のファイルタイプがあります。一つ目はcronで、もう一つはPHPです。 このcronというファイルは同名のPHPファイルと対になって存在しています。 もう一つは、実際に携帯の写メール投稿や、RSSの取得などの処理を行うPHPファイルです。

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
.
.
.

この中で、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ディレクトリを見ていきましょう。 このlibディレクトリの中には、includeディレクトリとincludeディレクトリがあります。このlibディレクトリには外部のライブラリが入っています。具体的にはPEARなどが入っています。 このlib直下のREADME.txtにも書いていますが、いくつか注意が必要なことがあります。 OpenPNEはPHPライセンスですが、このlib直下のライブラリは必ずしもPHPライセンスではないということです。ですので、使用する際には十分注意が必要です。 ただし、あくまでPHPライセンスで使用できるライセンスのライブラリで、GPLなど縛りの強いライセンスは同梱していないので、PHPライセンスであれば使用しても大丈夫です。

libディレクトリ

include

このincludeディレクトリは、外部のライブラリでOpenPNEに欠かせないライブラリが揃っています。

このincludeディレクトリの特徴としては、このincludeディレクトリはインクルードパスに指定されていますので、ライブラリ名を指定して読み込むだけでファイルを読み込むことが出来ます。

全体的にこのライブラリ群を見ると、このincludeディレクトリはの中に含まれるライブラリはほぼPEARのライブラリです。

この中でも主要なディレクトリや特徴のあるライブラリについて解説していきます。

includeディレクトリ

まず、一番上のAuthディレクトリですが、OpenPNEの認証系には欠かせないライブラリが入っています。 このAuthディレクトリの中でも、ContainerディレクトリはSlavePNEを実現するためのライブラリ群が入っています。SlavePNEはこのPEAR_Authを使って実現しているので、どのような認証系が使えるかどうかが知りたければ、この中のContainerディレクトリを見てみるのもいいと思います。

Containerディレクトリ

DBディレクトリもOpenPNEでは積極的に読み込んで使用しています。 OpenPNEはこのPEAR_DBに依存しているので、このライブラリ群がなければ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

このsmarty_pluginsディレクトリは先ほど説明したSmartyのプラグインのためのディレクトリです。

しかし、現状はmodifier.date_format.phpというファイルしか入っていません。 このファイルはSmartyで日付を扱う時に必要なので同梱しています。

pubic_html

それでは、WEBサーバの公開領域であるpubic_htmlディレクトリを見ていきましょう。 このpubic_htmlディレクトリはWEBサーバから読み込まれるディレクトリなのでcssやjsなどがあります。詳しくは後ほど説明します。

pubic_htmlディレクトリ

このディレクトリにあるファイルを見ると、まずcap.phpがあります。このcap.phpはlib/includeディレクトリ以下にあるkcaptchaというライブラリを使うためにあります。 kcaptchaライブラリは招待メールを送るときや、新規登録の際にコンピュータが判別しにくい崩れた人間しか読めない文字の画像を表示するために使用しています。 次に、img.phpとimg_skin.phpがあります。この2つのファイルはDBから画像ファイルを読み込むためにあります。ブラウザ側から直接WEBサーバにアクセスすることができないので、このimg.phpとimg_skin.phpがブラウザとDBの橋渡しになって画像ファイルのやり取りをしています。 img.phpとimg_skin.phpの違いは、通常の画像なのか、スキン用の画像なのかという違いがあります。具体的には、認証の部分が違います。通常の画像はタイムスタンプがついていますが、テンプレートからスキン画像を読み込む場合はそれが出来ないので、この様に2種類のファイルに分けて画像の受け渡しをしています。

最後に、index.phpというファイルがあります。OpenPNEでは、基本的にすべてこのindex.phpが読み込まれて処理が始まります。OpenPNEではフロントコントローラという形式をとっており、入り口はここの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

css

flash

img

js

modules

skin

setup

script

sql

var

webapp

lib

db ===

OpenPNE

modules

admin

pc

do
page
templates
validate

templates

validate

webapp_biz

modules templates

webapp_ext

modules templates

まとめ

http://trac.openpne.jp/browser/OpenPNE/trunk