ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changes between Version 11 and Version 12 of pne-book-9-1


Ignore:
Timestamp:
Mar 19, 2008, 2:54:26 PM (13 years ago)
Author:
imoto
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • pne-book-9-1

    v11 v12  
    44
    55== 概要 ==
    6 OpenPNEディベロッパーガイドのはじめはディレクトリツアーということで、OpenPNEのディレクトリ構造を見ていきます。[[BR]]
    7 現在のOpenPNE2.0系は独自のフレームワークを採用しています。[[BR]]
     6ディレクトリツアーではOpenPNEのディレクトリ構造を見ていきます。[[BR]]
     7現在のOpenPNE2.0系は独自のフレームワークを採用しています。[[BR]]
    88よってディレクトリ構造も独自の構成をしています。[[BR]]
    99今回は、trac.openpne.jpのtrunkを参照しながら解説を行っていきますのでディレクトリはアルファベット順になっているので、解説も上からアルファベット順に解説していきます。
     
    3939ここには、いろいろなディレクトリがあります。それぞれディレクトリについて後ほど詳しく解説するのでここでは割愛します。[[BR]]
    4040
    41 このrootディレクトリにはその他に、2つのファイルがあります。一つがconfig.php.sampleという設定ファイルです。もう一つはLICENSEファイルです。
    42 
    43 簡単に2つのファイルについて説明すると、config.php.sampleは通常config.phpとリネームしてOpenPNEの設定ファイルとして使用します。この設定ファイルには、データベースの設定から、OpenPNEのAPI設定までさまざまな設定項目があります。詳しくは、実際にconfig.php.sampleを開いてどのような項目があるか確認してみてください。
    44 
    45 このrootディレクトリの特徴としては、WordPressやXOOPSのように、rootディレクトリにphpファイルが多くないことが特徴です。また、index.phpがこのディレクトリにないのも特徴です。これは、公開ディレクトリを、後ほど説明するpubic_htmlだけに限定しているため、このrootディレクトリはWEBサーバの公開範囲外なので、index.phpがないという特徴を持っています。
     41このrootディレクトリにはその他に、二つのファイルがあります。一つがconfig.php.sampleという設定ファイルです。もう一つはLICENSEファイルです。
     42
     43簡単に2つのファイルについて説明すると、config.php.sampleは通常config.phpとリネームしてOpenPNEの設定ファイルとして使用します。この設定ファイルには、データベースの設定から、OpenPNEのAPI設定までさまざまな設定項目があります。詳しくは、実際にconfig.php.sampleを確認してみてください。各項目にはコメントがあるのでコメントを読めば分かると思います。
     44
     45
     46{{{
     47config.php.sample
     48
     49
     50<?php
     51//// サーバー管理設定 ////
     52
     53//--- 必須設定
     54
     55// Web上の絶対パス(URL)(最後にスラッシュを付けてください)
     56define('OPENPNE_URL', 'http://sns.example.com/');
     57
     58// DBサーバ設定
     59$GLOBALS['_OPENPNE_DSN_LIST']['main'] = array(
     60'dsn'  => array(
     61    'phptype'  => 'mysql',
     62    'username' => '',
     63    'password' => '',
     64    'hostspec' => 'localhost',
     65    'database' => '',
     66    'new_link' => false,
     67    ),
     68);
     69
     70// DB暗号化キー(56バイト以内のASCII文字列)
     71define('ENCRYPT_KEY', '');
     72
     73// メールサーバードメイン
     74// 携帯メール投稿の宛先などのドメイン名に使われる
     75define('MAIL_SERVER_DOMAIN', 'mail.example.com');
     76
     77
     78//--- オプション設定
     79
     80// デバッグモード
     81// 0: off ... エラー非表示、エラーログを記録する
     82// 1: on  ... エラー表示、エラーログを記録しない
     83// 2: on  ... 1 + Smartyデバッグコンソール
     84define('OPENPNE_DEBUGGING', 1);
     85
     86// 無効にするモジュール
     87//$GLOBALS['_OPENPNE_DISABLE_MODULES'] = array('admin', 'setup');
     88
     89// メンテナンスモード
     90// メンテナンスモードではデイリーメール配信やメール投稿機能も無効になります
     91// true: ユーザーにメンテナンス画面を表示
     92define('OPENPNE_UNDER_MAINTENANCE', false);
     93
     94// メンテナンス画面に表示させるテキスト
     95// HTMLが使用できます
     96// 未入力の場合は、標準のテキストが表示されます
     97define('OPENPNE_MAINTENANCE_TEXT', '');
     98
     99// メンテナンス中でも表示するモジュール名
     100$GLOBALS['_OPENPNE_MAINTENANCE_MODULES'] = array('admin');
     101
     102// Crypt_Blowfish ライブラリの旧バージョン使用設定
     103// 2.2以前からのアップグレードでログインできないなどの
     104//暗号化まわりの不具合が起こった場合はtrueに設定してください
     105define('OPENPNE_USE_OLD_CRYPT_BLOWFISH', false);
     106
     107// ファンクションキャッシュ使用設定
     108//有効にした場合は、最新情報の表示に遅延が起こることがあります
     109define('OPENPNE_USE_FUNCTION_CACHE', false);
     110
     111// このオプションを有効にするためにはOPENPNE_USE_FUNCTION_CACHEをtrueにする必要があります。
     112// ファンクションキャッシュのキャッシュを保存するストレージにmemcacheを使用
     113define('OPENPNE_USE_FUNCTION_CACHE_MEMCACHE', false);
     114
     115// OPENPNE_USE_FUNCTION_CACHE_MEMCACHEがtrueの場合の
     116// ファンクションキャッシュ用memcacheサーバ設定
     117$GLOBALS['_OPENPNE_MEMCACHE_LIST']['func_cache'] = array(
     118'dsn' => array(
     119    'hostspec' => '127.0.0.1',
     120    ),
     121);
     122
     123// MySQL ヒント使用設定
     124define('OPENPNE_USE_MYSQL_HINT', true);
     125
     126// セッション情報を保存するストレージ
     127// 0:ファイル
     128// 1:データベース
     129// 2:memcache(要PECL::memcache)
     130define('SESSION_STORAGE', 0);
     131
     132// 確認画面用の一時画像をDBに保存するかどうか
     133define('OPENPNE_TMP_IMAGE_DB', false);
     134
     135// 確認画面用の一時ファイルをDBに保存するかどうか
     136define('OPENPNE_TMP_FILE_DB', false);
     137
     138///
     139// DBサーバ設定
     140///
     141
     142// メインデータ読み込み用DB(オプション)
     143//$GLOBALS['_OPENPNE_DSN_LIST']['main_reader'][] = array(
     144//'priority' => 1,
     145//'dsn' => array(
     146//    'phptype'  => 'mysql',
     147//    'username' => '',
     148//    'password' => '',
     149//    'hostspec' => 'localhost',
     150//    'database' => '',
     151//    'new_link' => false,
     152//    ),
     153//);
     154//$GLOBALS['_OPENPNE_DSN_LIST']['main_reader'][] = array(
     155//'priority' => 1,
     156//'dsn' => array(
     157//    'phptype'  => 'mysql',
     158//    'username' => '',
     159//    'password' => '',
     160//    'hostspec' => 'localhost',
     161//    'database' => '',
     162//    'new_link' => false,
     163//    ),
     164//);
     165
     166// セッションデータ保存用DB(オプション)
     167//$GLOBALS['_OPENPNE_DSN_LIST']['session'] = array(
     168//'dsn' => array(
     169//    'phptype'  => 'mysql',
     170//    'username' => '',
     171//    'password' => '',
     172//    'hostspec' => 'localhost',
     173//    'database' => '',
     174//    'new_link' => false,
     175//    ),
     176//);
     177
     178// セッションデータ保存用Memcache(オプション)
     179$GLOBALS['_OPENPNE_MEMCACHE_LIST']['session'] = array(
     180'dsn' => array(
     181    'hostspec' => '127.0.0.1',
     182    ),
     183);
     184
     185// 画像データ保存用DB(オプション)
     186//$GLOBALS['_OPENPNE_DSN_LIST']['image'] = array(
     187//'dsn' => array(
     188//    'phptype'  => 'mysql',
     189//    'username' => '',
     190//    'password' => '',
     191//    'hostspec' => 'localhost',
     192//    'database' => '',
     193//    ),
     194//);
     195
     196///
     197// SSL設定
     198///
     199
     200// 特定ページだけのSSLを使用するかどうか
     201define('OPENPNE_USE_PARTIAL_SSL', false);
     202
     203// SSL使用状況をリクエストパラメータから取得するかどうか
     204define('OPENPNE_USE_SSL_PARAM', false);
     205
     206// SSL用URL (Cookieの値を引き継ぐため、OPENPNE_URL と同一ドメイン・パスである必要があります)
     207define('OPENPNE_SSL_URL', 'https://sns.example.com/');
     208
     209// SSLを使用することが必須であるモジュールリスト
     210$GLOBALS['_OPENPNE_SSL_REQUIRED_MODULES'] = array('admin');
     211
     212// SSLを使用することが必須であるアクションリスト
     213$GLOBALS['_OPENPNE_SSL_REQUIRED'] = array(
     214'pc' => array(
     215    'page_o_regist_prof',  'page_o_regist_prof_confirm', 'do_o_regist_prof',
     216    'page_o_regist_intro', 'page_o_ri', 'page_o_regist_end',
     217    'page_h_config_prof', 'page_h_config_prof_confirm', 'do_h_config_prof',
     218    'page_h_config_ktai', 'do_h_config_ktai_send',
     219    'page_h_config', 'do_h_config_1', 'do_h_config_2', 'do_h_config_3',
     220    'page_o_login', 'page_o_tologin', 'do_o_login',
     221    'page_o_public_invite','do_o_public_invite',
     222    'page_h_invite','page_h_invite_confirm','do_h_invite_insert_c_invite',
     223    'page_o_password_query','do_o_password_query',
     224),
     225'ktai' => array(
     226    'page_o_login', 'do_o_login', 'do_o_easy_login',
     227    'page_o_login2', 'do_o_update_ktai_address',
     228    'page_o_regist_pre', 'page_o_regist_input', 'do_o_insert_c_member',
     229    'page_o_regist_end',
     230    'page_o_password_query', 'do_o_password_query',
     231    'page_h_config_prof', 'do_h_config_prof_update_c_member',
     232    'page_h_config_easy_login', 'do_h_config_easy_login',
     233    'page_h_config_mail', 'do_h_config_mail_insert_c_ktai_address_pre',
     234    'page_h_pc_send', 'page_h_pc_send_confirm', 'do_h_pc_send_insert_c_pc_address_pre',
     235    'page_h_config_password_query', 'do_h_config_password_query_update_password_query',
     236    'page_h_config_password', 'do_h_config_password_update_password',
     237    'page_h_config', 'page_h_invite', 'do_h_invite_insert_c_invite',
     238));
     239
     240// SSLを使用するかどうかをユーザーが選択できるアクションリスト
     241$GLOBALS['_OPENPNE_SSL_SELECTABLE'] = array(
     242'pc' => array(
     243),
     244'ktai' => array(
     245));
     246
     247///
     248// パス設定
     249///
     250
     251define('OPENPNE_LIB_DIR'    , OPENPNE_DIR . '/lib');
     252define('OPENPNE_VAR_DIR'    , OPENPNE_DIR . '/var');
     253define('OPENPNE_WEBAPP_DIR' , OPENPNE_DIR . '/webapp');
     254define('OPENPNE_MODULES_DIR', OPENPNE_WEBAPP_DIR . '/modules');
     255define('OPENPNE_RSS_CACHE_DIR', OPENPNE_VAR_DIR . '/rss_cache');
     256define('OPENPNE_PUBLIC_HTML_DIR', OPENPNE_DIR . '/public_html');
     257
     258///
     259// webapp_ext ディレクトリ使用設定
     260///
     261
     262define('USE_EXT_DIR', false);
     263define('OPENPNE_WEBAPP_EXT_DIR' , OPENPNE_DIR . '/webapp_ext');
     264define('OPENPNE_MODULES_EXT_DIR', OPENPNE_WEBAPP_EXT_DIR . '/modules');
     265
     266///
     267// webapp_biz ディレクトリ使用設定
     268//
     269// BIZ使用設定は管理画面に移動しました
     270// define('USE_EXT_DIR', false);
     271define('OPENPNE_WEBAPP_BIZ_DIR' , OPENPNE_DIR . '/webapp_biz');
     272define('OPENPNE_MODULES_BIZ_DIR', OPENPNE_WEBAPP_BIZ_DIR . '/modules');
     273
     274///
     275// デバッグ、エラーハンドリング、ログ設定
     276///
     277
     278error_reporting(E_ALL ^ E_NOTICE);
     279
     280switch(OPENPNE_DEBUGGING) {
     281// テスト開発環境
     282case 2:
     283    $GLOBALS['SMARTY']['debugging'] = true;
     284case 1:
     285    ini_set('display_errors', true);
     286    ini_set('log_errors', false);
     287    break;
     288// 本番運用環境
     289case 0:
     290default:
     291    ini_set('display_errors', false);
     292    ini_set('log_errors', true);
     293    ini_set('error_log', OPENPNE_VAR_DIR . '/log/php_errors.log');
     294    break;
     295}
     296
     297// アクセスログを取得するかどうか(c_access_log)
     298define('LOG_C_ACCESS_LOG', true);
     299
     300// カスタムログ用の関数名を指定します
     301define('OPENPNE_LOG_FUNCTION', '');
     302
     303///
     304// セッション・クッキー設定
     305///
     306
     307ini_set('session.gc_probability',1);
     308ini_set('session.gc_divisor',10000);
     309
     310ini_set('session.gc_maxlifetime', 432000); // 5 days
     311//session_save_path('/tmp');
     312
     313// PC版
     314// セッション生成時からの有効期限(秒) (0 の場合は無期限)
     315$GLOBALS['OpenPNE']['common']['session_lifetime'] = 0;
     316// セッションの有効期限(秒)
     317$GLOBALS['OpenPNE']['common']['session_idletime'] = 432000; // 5 days
     318
     319// 携帯版
     320// セッション生成時からの有効期限(秒) (0 の場合は無限)
     321$GLOBALS['OpenPNE']['ktai']['session_lifetime'] = 0;
     322// セッションの有効期限(秒)
     323$GLOBALS['OpenPNE']['ktai']['session_idletime'] = 3600; // 1 hour
     324
     325// 管理画面版
     326// セッション生成時からの有効期限(秒) (0 の場合は無限)
     327$GLOBALS['OpenPNE']['admin']['session_lifetime'] = 0;
     328// セッションの有効期限(秒)
     329$GLOBALS['OpenPNE']['admin']['session_idletime'] = 86400; // 1 day
     330
     331// セッションにOPENPNE_URLを保存しておく
     332// 同一サーバ上で複数のSNSを運用する場合のセッションの混同を防ぐ
     333// falseからtrueにした場合、または2.4RC1以前のバージョンからアップデートした場合
     334// それまでのセッションが無効になりログアウトされます
     335define('OPENPNE_SESSION_CHECK_URL', true);
     336
     337///
     338// 画像
     339///
     340
     341// 画像を別サーバに設定する場合に指定する
     342//define('OPENPNE_IMG_URL', 'http://img.example.com/');
     343
     344//// 画像サーバ用設定 ////
     345//define('OPENPNE_IS_IMG_SERVER', false);
     346
     347// 画像キャッシュをpublic_html以下に置くかどうか(要mod_rewrite)
     348define('OPENPNE_IMG_CACHE_PUBLIC', false);
     349
     350// 画像キャッシュディレクトリ(要書き込み権限)
     351if (OPENPNE_IMG_CACHE_PUBLIC) {
     352    define('OPENPNE_IMG_CACHE_DIR', OPENPNE_PUBLIC_HTML_DIR . '/img');
     353} else {
     354    define('OPENPNE_IMG_CACHE_DIR', OPENPNE_VAR_DIR . '/img_cache');
     355}
     356
     357// 画像変換時に許可する解像度のリスト (幅x高さ)
     358// (空の配列を指定すると無制限になります)
     359$GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] = array('76x76', '120x120', '180x180', '240x320');
     360
     361// 画像キャッシュのファイル名のprefix
     362define('OPENPNE_IMG_CACHE_PREFIX', 'img_cache_');
     363
     364// 画像変換後のJPEGのQUALITY値
     365define('OPENPNE_IMG_JPEG_QUALITY', 75);
     366
     367// ImageMagick使用設定
     368// 0: off ... ImageMagickを使わない
     369// 1: on  ... GIFのみImageMagickを使う
     370// 2: on  ... JEPG,PNG,GIFにImageMagickを使う(ただし、GDも必要)
     371define('USE_IMAGEMAGICK', 0);
     372
     373// ImageMagick の convertコマンドのパス
     374define('IMGMAGICK_APP', '/usr/bin/convert');
     375//define('IMGMAGICK_APP', '"C:\Program Files\ImageMagick-6.2.5-Q16\convert"');
     376
     377// ImageMagick のオプション(デフォルトは -resize)
     378//define('IMGMAGICK_OPT', '-thumbnail');
     379
     380// アップロード画像のファイルサイズ制限(KB)
     381define('IMAGE_MAX_FILESIZE', 300);
     382
     383// アップロード画像の大きさ制限(ピクセル)
     384// 0 を指定した場合は無制限
     385define('IMAGE_MAX_WIDTH', 0);
     386define('IMAGE_MAX_HEIGHT', 0);
     387
     388// 携帯版「大」サイズ画像表示時の解像度制限
     389// ($GLOBALS['_OPENPNE_IMG_ALLOWED_SIZE'] で許可された解像度を指定してください)
     390define('OPENPNE_IMG_KTAI_MAX_WIDTH', 240);
     391define('OPENPNE_IMG_KTAI_MAX_HEIGHT', 320);
     392
     393///
     394// ファイルアップロード機能
     395///
     396
     397// ファイルアップロード機能を使用するかどうか
     398define('OPENPNE_USE_FILEUPLOAD', false);
     399
     400// アップロードファイルのファイルサイズ制限(KB)
     401define('FILE_MAX_FILESIZE', 300);
     402
     403// 許可する拡張子のリスト(カンマ(,)区切り)
     404// 未指定の場合は全て許可
     405//define('FILE_ALLOWED_EXTENTIONS', 'pdf,xls,ppt,zip');
     406define('FILE_ALLOWED_EXTENTIONS', '');
     407
     408///
     409// 外部RSS取得
     410///
     411
     412// 一度に取得するRSSの件数
     413define('RSS_CACHE_LIMIT', 100);
     414
     415///
     416// 携帯メール投稿
     417///
     418
     419// 宛先メールアドレスのprefix
     420//define('MAIL_ADDRESS_PREFIX', 'sns_');
     421
     422// 宛先メールアドレスをハッシュにするか
     423define('MAIL_ADDRESS_HASHED', true);
     424
     425// 受信メールの文字コード(Content-Typeから取得できない場合に使う)
     426//define('MAIL_FROM_ENCODING', 'JIS');
     427define('MAIL_FROM_ENCODING', 'auto');
     428
     429// メールログを取るかどうか(var/log/mail.log)
     430define('MAIL_DEBUG_LOG', false);
     431
     432///
     433// メール送信設定
     434///
     435
     436// 半角カタカナを全角カタカナに変換して送信する
     437define('MAIL_HAN2ZEN', true);
     438
     439// MTAに渡すヘッダの改行コード(LF->CRLF の自動変換が行われることへの対策)
     440//define('MAIL_HEADER_SEP', 'CRLF');
     441define('MAIL_HEADER_SEP', 'LF');
     442
     443// Envelope-From ヘッダを設定するかどうか(safe_mode の場合は false に設定してください)
     444define('MAIL_SET_ENVFROM', true);
     445
     446// Envelope-From で設定するメールアドレス
     447//(指定しない場合は、管理者メールアドレス(Fromと同じ))
     448//define('MAIL_ENVFROM', 'system@example.com');
     449
     450///
     451// mbstring設定
     452///
     453
     454mb_language('Japanese');
     455ini_set('mbstring.detect_order', 'auto');
     456ini_set('mbstring.http_input'  , 'auto');
     457ini_set('mbstring.http_output' , 'pass');
     458ini_set('mbstring.internal_encoding', 'UTF-8');
     459ini_set('mbstring.script_encoding'  , 'UTF-8');
     460ini_set('mbstring.substitute_character', 'none');
     461mb_regex_encoding('UTF-8');
     462mb_substitute_character("long");
     463mb_substitute_character(0x3013);
     464
     465// Validatorで全角スペースを削除するかどうか
     466// mb_ereg_replace でエラーが出る場合は false にしてください
     467define('OPENPNE_TRIM_DOUBLEBYTE_SPACE', true);
     468
     469///
     470// API通信設定
     471///
     472
     473// API通信使用設定
     474define('OPENPNE_USE_API', false);
     475
     476// セッション鍵生成用文字列(適当な文字列に変更してください)
     477define('OPENPNE_API_TOKEN', 'OpenPNE');
     478
     479// クライアントのIPアドレスのあるサーバ変数名($_SERVER['REMOTE_ADDR'])
     480//define('SERVER_IP_KEY', 'HTTP_X_FORWARDED_FOR');
     481define('SERVER_IP_KEY', 'REMOTE_ADDR');
     482
     483///
     484// HTTPプロキシ設定
     485///
     486
     487// HTTPプロキシ使用設定
     488define('OPENPNE_USE_HTTP_PROXY', false);
     489
     490// プロキシのホスト名
     491define('OPENPNE_HTTP_PROXY_HOST', 'proxy.example.com');
     492
     493// プロキシのポート番号
     494define('OPENPNE_HTTP_PROXY_PORT', 8080);
     495
     496///
     497// memory_limit設定
     498///
     499// ini_set('memory_limit','32M');
     500
     501///
     502// umask設定
     503///
     504
     505umask(0);
     506
     507///
     508// Google Maps API key
     509// http://www.google.com/apis/maps/ から取得
     510///
     511define('GOOGLE_MAPS_API_KEY', '');
     512
     513///
     514// Google AJAX Search API key
     515// http://code.google.com/apis/ajaxsearch/signup.html  から取得
     516///
     517define('GOOGLE_AJAX_SEARCH_API_KEY', '');
     518
     519//// SNSアプリケーション設定 ////
     520
     521// 管理画面のURL設定
     522//(OPENPNE_URL)?m=ADMIN_MODULE_NAME (例. http://sns.example.com/?m=admin)
     523define('ADMIN_MODULE_NAME', 'admin');
     524
     525// 管理画面にバージョン情報を表示するかどうか
     526define('DISPLAY_VERSION', true);
     527
     528// ダッシュボードで表示するOpenPNE情報のURL設定
     529// URLを空にするとダッシュボードが非表示になります
     530define('OPENPNE_DASHBOARD_URL', 'http://ad.pne.jp/dashboard/');
     531
     532// 天気予報ページのURL設定
     533define('OPENPNE_WEATHER_URL', 'http://weather.yahoo.co.jp/weather/');
     534
     535// 携帯版でUser-Agentのチェックをするかどうか
     536define('CHECK_KTAI_UA', true);
     537
     538// 携帯版でIP制限機能を使用するかどうか
     539// IPリストは webapp/lib/ktaiIP.php
     540define('CHECK_KTAI_IP', false);
     541
     542// メール一斉送信のメールキューの使用
     543define('OPENPNE_MAIL_QUEUE', false);
     544// メールキューで一度に送信するメールの数
     545define('SEND_MAIL_QUEUE_NUM', 10);
     546
     547// メッセージ一斉送信のメッセージキューの使用
     548define('OPENPNE_MESSAGE_QUEUE', false);
     549// メッセージキューで一度に送信するメッセージの数
     550define('SEND_MESSAGE_QUEUE_NUM', 10);
     551
     552// CAPTCHA(画像のなかの文字列をメンバーに入力させる認証方式)を使用するかどうか
     553define('OPENPNE_USE_CAPTCHA', true);
     554
     555// 認証モード設定
     556//  email    : メールアドレスとパスワードによるログイン
     557//  pneid    : IDとパスワードによるログイン
     558//  slavepne : 外部認証(SlavePNE機能)を使ったログイン
     559define('OPENPNE_AUTH_MODE', 'email');
     560
     561// 外部認証時にメールアドレス登録を必須にするかどうか
     562define('IS_SLAVEPNE_EMAIL_REGIST', true);
     563
     564// 招待メールに記載するURL
     565define('SLAVEPNE_SYOUTAI_URL_PC', '');
     566define('SLAVEPNE_SYOUTAI_URL_KTAI', '');
     567
     568// OPENPNE_AUTH_MODE がslavepneの場合のauthオプション
     569$GLOBALS['_OPENPNE_AUTH_CONFIG'] =
     570array(
     571'storage'=>"DB",
     572'options'=>array(
     573    'dsn'         => array(
     574        'phptype'  => 'mysql',
     575        'username' => 'root',
     576        'password' => '',
     577        'hostspec' => 'localhost',
     578        'database' => '',
     579        'new_link' => true,
     580        ),
     581    'table'       => '',
     582    'usernamecol' => 'username',
     583    'passwordcol' => 'password',
     584    'cryptType'   => 'none',
     585    ),
     586);
     587
     588//画像へのアクセスをSNS認証する
     589//※画像静的化機能を用いている場合は利用できません
     590define('CHECK_IMG_AUTH', false);
     591
     592// PC表示時にau/SoftBankの絵文字をDoCoMo絵文字に変換するかどうか
     593// au/SoftBankの絵文字を使用するには、 public_html/skin/default/img/emoji/{e|s} に画像を用意する必要があります
     594define('OPENPNE_EMOJI_DOCOMO_FOR_PC', true);
     595
     596// ページのキャッシュをさせないヘッダを送信するかどうか
     597// ただしau端末の場合はこの設定にかかわらず、常に「ページのキャッシュをさせないヘッダ」が送信されます
     598define('OPENPNE_SEND_NO_CACHE_HEADER', false);
     599
     600// 管理画面でURL・小窓変換機能を使用するかどうか
     601define('OPENPNE_ADMIN_CONVERT_URL', true);
     602
     603//OpenIDのプロバイダとなるかどうか
     604define('IS_OPENID_PROVIDER', false);
     605
     606//OpenIDの乱数用定義
     607define('Auth_OpenID_RAND_SOURCE', NULL);
     608
     609?>
     610
     611}}}
     612
     613
     614このrootディレクトリの特徴としては、WordPressやXOOPSのように、rootディレクトリにあるphpファイルが多くないことが特徴です。また、index.phpがこのディレクトリにないのも特徴です。これは、公開ディレクトリを、後ほど説明するpubic_htmlだけに限定しているため、このrootディレクトリはWebサーバの公開範囲外なので、index.phpがないという特徴を持っています。
    46615それではまず、binディレクトリから詳しく見ていこうと思います。
    47616
     
    87656
    88657
    89 この中に、cronとPHPファイルが対でないファイルが2つあります。その2つのファイルととはconfig.inc.phpとmail.phpです。簡単にこの2つのファイルについて解説します。
     658このbinディレクトの中に、cronとPHPファイルが対でないファイルが2つあります。その2つのファイルととはconfig.inc.phpとmail.phpです。簡単にこの2つのファイルについて解説します。
    90659
    91660まず、config.inc.phpは中を見ると分かりますが、root以下にあるconfig.phpを読み込む処理が書いています。
     
    124693
    125694それでは次に、rootディレクトリ直下にあるlibディレクトリを見ていきましょう。[[BR]]
    126 このlibディレクトリの中には、includeディレクトリとincludeディレクトリがあります。このlibディレクトリには外部のライブラリが入っています。具体的にはPEARなどが入っています。
    127 
    128 このlib直下のREADME.txtにも書いていますが、いくつか注意が必要なことがあります。[[BR]]
    129 OpenPNEはPHPライセンスですが、このlib直下のライブラリは必ずしもPHPライセンスではないということです。ですので、使用する際には十分注意が必要です。[[BR]]
     695このlibディレクトリの中には、includeディレクトリとsmarty_pluginsディレクトリがあります。このlibディレクトリには外部のライブラリが入っています。具体的にはPEARのライブラリなどが入っています。
     696
     697このlib直下のREADME.txtにも書いていますが、このライブラリを使用する際に注意が必要なことがあります。[[BR]]
     698それは、OpenPNEはPHPライセンスですが、このlib直下のライブラリは必ずしもPHPライセンスではないということです。ですので、使用する際には十分注意が必要です。[[BR]]
    130699ただし、あくまでPHPライセンスで使用できるライセンスのライブラリで、GPLなど縛りの強いライセンスは同梱していないので、PHPライセンスであれば使用しても大丈夫です。[[BR]]
    131700
     
    205774
    206775 ファイルの中に、simplepie.incというファイルがあります。[[BR]]
    207  OpenPNEは現在のPHPライセンスにする前はGPLライセンスというライセンス形態をとっており、RSS取得のためのライブラリはMagpieRSSを使っていたのですが、MagpieRSSがGPLライセンスなので、PHPライセンスにすることが出来ませんでした。そこで、OpenPNE2.3.0にするときに、このsimplepieというライブラリに変更すしたという経緯があります。
    208 
     776 OpenPNEは現在のPHPライセンスにする前はGPLライセンスというライセンス形態をとっていました。RSS取得のためのライブラリにMagpieRSSを使っていたのですが、MagpieRSSがGPLライセンスなので、PHPライセンスにすることが出来ませんでした。そこで、OpenPNE2.3.0にするときに、このsimplepieというライブラリに変更したという経緯があります。
    209777
    210778{{{
     
    253821
    254822
    255 それでは、WEBサーバの公開領域であるpubic_htmlディレクトリを見ていきましょう。[[BR]]
    256 このpubic_htmlディレクトリはWEBサーバから読み込まれるディレクトリなのでcssやjsなどがあります。詳しくは後ほど説明します。[[BR]]
     823それでは、Webサーバの公開領域であるpubic_htmlディレクトリを見ていきましょう。[[BR]]
     824このpubic_htmlディレクトリはWebサーバから読み込まれるディレクトリなのでcssやjsなどがあります。詳しくは後ほど説明します。[[BR]]
    257825また、このpubic_htmlは公開領域であるために注意が必要な場合があります。[[BR]]
    258826このpubic_htmlディレクトリ以下のファイルはURLを直接入力された場合は誰でも見ることが出来るという特徴があります。[[BR]]
    259 例えlば、会員のみに公開したい資料などをここに置いた場合でも、会員でない人がURLを直接入力してアクセスした場合は見ることが可能なので注意が必要です。[[BR]]
     827例えば、会員のみに公開したい資料などをここに置いた場合でも、会員でない人がURLを直接入力してアクセスした場合は見ることが可能なので注意が必要です。[[BR]]
    260828
    261829
    262830このディレクトリにあるファイルを見ると、まずcap.phpがあります。このcap.phpはlib/includeディレクトリ以下にあるkcaptchaというライブラリを使うためにあります。[[BR]]
    263831kcaptchaライブラリは招待メールを送るときや、新規登録の際にコンピュータが判別しにくい崩れた人間しか読めない文字の画像を表示するために使用しています。[[BR]]
    264 次に、img.phpとimg_skin.phpがあります。この2つのファイルはデータベースから画像ファイルを読み込むためにあります。ブラウザ側から直接WEBサーバにアクセスすることができないので、このimg.phpとimg_skin.phpがブラウザとデータベースの橋渡しになって画像ファイルのやり取りをしています。[[BR]]
     832次に、img.phpとimg_skin.phpがあります。この2つのファイルはデータベースから画像ファイルを読み込むためにあります。ブラウザ側から直接Webサーバにアクセスすることができないので、このimg.phpとimg_skin.phpがブラウザとデータベースの橋渡しになって画像ファイルのやり取りをしています。[[BR]]
    265833img.phpとimg_skin.phpの違いは、通常の画像なのか、スキン用の画像なのかという違いがあります。具体的には、認証の部分が違います。通常の画像はタイムスタンプがついていますが、テンプレートからスキン画像を読み込む場合はそれが出来ないので、この様に2種類のファイルに分けて画像の受け渡しをしています。
    266834
    267835最後に、index.phpというファイルがあります。OpenPNEでは、基本的にすべてこのindex.phpが読み込まれて処理が始まります。OpenPNEのフレームワークはフロントコントローラという形式をとっており、入り口はこのindex.php一つにまとめています。このindex.phpからすべての処理が始まります。[[BR]]
    268 このindex.phpの中身を見てみると非常にシンプルなソースコードになっています。[[BR]]
     836このindex.phpを見てみると非常にシンプルなソースコードになっています。[[BR]]
    269837openpne_executeという関数がありますが、これはOpenPNEのコントローラを実行する関数です。このopenpne_executeにURLから受け取ったパラメータを渡してそれぞれのパラメータから処理を判断して実行しています。[[BR]]
    270838
     
    272840
    273841{{{
     842index.php
     843   
    274844<?php
    275845/**
     
    333903
    334904 このcmdディレクトリは、OpenPNEの目玉機能でもある小窓機能を実現するためのJavaScriptは入っています。小窓には通常小窓形式(CMDタグ)、URL2CMD形式(URL)と2つの形式がありますが、どちらの形式で小窓が使用されても、このcmdディレクトリにあるJavaScriptが読み込まれます。[[BR]]
    335  このcmdディレクトリにあるファイルはすべてJavaScriptです。そのため、WEBサーバから読み込むことが出来る必要があるため公開ディレクトリに存在します。[[BR]]
     905 このcmdディレクトリにあるファイルはすべてJavaScriptです。そのため、Webサーバから読み込むことが出来る必要があるため公開ディレクトリに存在します。[[BR]]
    336906 cmdディレクトリにあるJavaScriptファイルの特長としては、ファイル名が「ドメイン名+.js」となっているところです。これは小窓の規約に「使用するドメインに「.js」をつけるという」とうのがあるためです。[[BR]]
    337907 
     
    340910 === css ===
    341911 このcssディレクトリには、OpenPNEのスタイルシートが入っています。[[BR]]
    342  基本的には、すべてこのcssディレクトリに入っています。しかし、現状は動的に書き出す必要がある配色設定などはテンプレートに直接書いています。[[BR]]
    343  動的に書き出す必要がないフォントの大きさなどはこのcssディレクトリに入っています。
     912 OpenPNEのデザインに関わるCSSは基本的に、すべてこのcssディレクトリに入っています。しかし、現状は動的に書き出す必要がある配色設定などはテンプレートに直接書いています。[[BR]]
     913 動的に書き出す必要がないフォントの大きさなどのCSSはこのcssディレクトリに入っています。
    344914
    345915 {{{
     
    377947
    378948 次はflashディレクトリです。[[BR]]
    379  ここにはflashファイルが入っています。しかし、このflashディレクトリには現在1つしかファイルがありません。現在あるファイルはフレンドリストをFlashで表示するという機能のソースです。このflashのソースも公開してますので、これを編集しなおしてオリジナルのフレンドリストを作ることも可能です。[[BR]]
     949 ここにはflashファイルが入っています。しかし、このflashディレクトリには現在つしかファイルがありません。現在あるファイルはフレンドリストをFlashで表示するという機能のソースです。このflashのソースも公開してますので、これを編集しなおしてオリジナルのフレンドリストを作ることも可能です。[[BR]]
    380950
    381951 {{{
     
    416986 imgディレクトリの中には、画像の形式ごとにディレクトリ分けされています。[[BR]]
    417987 また、画像の大きさが決まっているので、画像の大きさごとに各ディレクトリにキャッシュされます。
     988 
    418989 {{{
    419990root/public_html/img/gif/
     
    4581029 
    4591030 
    460  このmodulesディレクトリには、admin、pc、setupと各モジュールごとに必要なファイルが入っています。例えば、adminディレクトリでは、管理画面のcssや管理画面のボタンが入っています。[[BR]]
     1031 このmodulesディレクトリには、admin、pc、setupと各モジュールごとに必要なファイルが入っています。例えば、adminディレクトリでは、管理画面のCSSや管理画面のボタンが入っています。[[BR]]
    4611032 pcディレクトリは現在空のディレクトリです。[[BR]]
    462  setupディレクトリはsetupに必要なcssが入っています。[[BR]]
     1033 setupディレクトリはsetupに必要なCSSが入っています。[[BR]]
    4631034
    4641035
     
    4871058
    4881059 001_openpne_redディレクトリの中を見ると、imgディレクトリとskin.iniファイルがあります。
     1060 
    4891061 {{{
    4901062root/public_html/skin/001_openpne_red/
     
    5051077}}}
    5061078
    507  次に、imgディレクトリについてですが、このimgディレクトリにはOpenPNEレッドに必要な画像しか入っていません。具体的には、ヘッダーやナビやログイン画面の画像などです。つまり、ボタン画像やアイコンは入っていません。[[BR]]
    508  001_openpne_redディレクトリにない、ボタン画像やアイコンはskinディレクトリ以下のdefaultディレクトリが読み込まれることになっています。同名のファイル名がない場合は、defaultディレクトリの画像が使われることになります。[[BR]]
     1079 次に、imgディレクトリについて見てみましょう。このimgディレクトリにはOpenPNEレッドに必要な画像しか入っていません。具体的には、ヘッダーやナビやログイン画面の画像などです。つまり、ボタン画像やアイコンは入っていません。[[BR]]
     1080 001_openpne_redディレクトリにない、ボタン画像やアイコンはskinディレクトリ以下のdefaultディレクトリが読み込まれることになっています。同名のファイル名がない場合は、defaultディレクトリの画像が使われることになります。[[BR]]
    5091081
    5101082 {{{
     
    5251097
    5261098
     1099
    5271100== setup ==
    528 このsetupディレクトリにはセットアップに必要なファイルとOpenPNEのマニュアルが入っています。[[BR]]
    529 PostgreSQLを使う場合はOpenPNE_Setup_pgsql.htmlを見てください。[[BR]]
    530 そのほかにも、アップグレードのマニュアルもあるので安定版から安定版にアップグレードしたいときは、OpenPNE_Upgrade.htmlを見てアップグレードを進めてください。[[BR]]
    531 それではscriptディレクトリから見ていきましょう。[[BR]]
    5321101
    5331102{{{
     
    5421111}}}
    5431112
     1113
     1114このsetupディレクトリにはセットアップに必要なファイルとOpenPNEのマニュアルが入っています。[[BR]]
     1115PostgreSQLを使う場合はOpenPNE_Setup_pgsql.htmlを見てください。[[BR]]
     1116そのほかにも、アップグレードのマニュアルもあるので安定版から安定版にアップグレードしたいときは、OpenPNE_Upgrade.htmlを見てアップグレードを進めてください。[[BR]]
     1117それではscriptディレクトリから見ていきましょう。[[BR]]
     1118
    5441119 === script ===
    5451120 
     
    5831158 installディレクトリにはOpenPNEを新規にインストールするためのSQLが入っています。
    5841159
    585  optionには、OpenPNEの動作に必須ではないSQLが入っています。例えば、add_c_api.sqlはOpenPNEの動作には直接関係していません。つまり実行しなくてもOpenPNEは動作します。[[BR]]しかし、OpenPNEのAPIを使用する場合にはこのadd_c_api.sqlを実行する必要があります。sqlディレクトリにあるREADME.txtの用途の欄を見ればoptionの説明があります。
     1160 optionには、OpenPNEの動作に必須ではないSQLが入っています。例えば、add_c_api.sqlはOpenPNEの動作には直接関係していません。つまり実行しなくてもOpenPNEは動作します。[[BR]]
     1161 しかし、OpenPNEのAPIを使用する場合にはこのadd_c_api.sqlを実行する必要があります。sqlディレクトリにあるREADME.txtの「用途」の欄を見ればoptionディレクトリにあるSQLの説明があります。
    5861162 
    5871163 updateには、OpenPNE2.9.1から2.9.2、2.9.2から2.9.3っていう形で、開発版のバージョンを上げるためのSQLが入っています。主に開発者や最新の動向を追いたい人が使用するSQLです。
     
    6081184このvarディレクトリには基本的には一時的なファイル、一時的なデータが入るようになります。ですので、OpenPNEをダウンロードして展開した状態だと空の状態です。
    6091185
    610 OpenPNEはデータはデータベースに置くという方針で開発しています。しかし、毎回データベースに接続して読み込んでいるとスピードが遅くなることがあるので、一度データベースから読み込んだファイルはこのvarディレクトリに置いておきます。[[BR]]
     1186OpenPNEはデータはデータベースに置くという方針で開発しています。しかし、毎回データベースに接続して読み込んでいると表示速度が遅くなることがあるので、一度データベースから読み込んだファイルはこのvarディレクトリに置いておきます。[[BR]]
    6111187そうすることで、毎回データベースにデータを読み込みに行く必要がなくなるのでパフォーマンスが上がります。
    6121188
    6131189varディレクトリを詳しく見ていきましょう。[[BR]]
    6141190まず一番上にfunction_cacheディレクトリがあります。このfunction_cacheディレクトリは、 負荷のかかる処理などをキャッシュするために存在します。[[BR]]
    615 例えば、OpenPNEにはランキングという機能がありますが、このランキングを集計するのは非常に時間がかかります。しかも、ランキングは一日に一回しか計算しないので、あらかじめ計算しておいて、このfunction_cacheディレクトリに置いています。このように、計算の難しいことや時間のかかることは一回計算した結果をこのfunction_cacheディレクトリに置いておきます。そして、二回目からはデータベースを読み込まないで、ファイルを読み込んで計算結果を出力しています。[[BR]]
     1191例えば、OpenPNEにはランキングという機能がありますが、このランキングを集計するのは非常に時間がかかります。しかも、ランキングは一日に一回しか計算しません。ですので、あらかじめ計算しておいて、このfunction_cacheディレクトリに置いています。このように、計算の難しいことや時間のかかることは一回計算した結果をこのfunction_cacheディレクトリに置いておきます。そして、二回目からはデータベースを読み込まないで、ファイルを読み込んで計算結果を出力しています。[[BR]]
    6161192
    6171193次に、img_cacheディレクトリです。このimg_cacheディレクトリは日記やプロフィールなどの画像をキャッシュするために存在します。この img_cacheディレクトリを見ると、まずは拡張子別で分かれていて、次に高さ・幅、サイズ別に分かれています。サイズを分けてキャッシュをとることによって性能が劣化するのを避けています。[[BR]]
     
    6341210次に、rss_cacheディレクトリです。rss_cacheディレクトリには外部ブログを取り込んだ結果を置いておきます。負荷対策のために、外部ブログのRSSもキャッシュしています。
    6351211
    636 次に、templates_cディレクトリです。templates_cディレクトリにはSmartyのテンプレートを一度解析して、解析の結果を一時ファイルとして置いています。Smartyのテンプレートもキャッシュをここに置いておくことで次に読み込まれるときに、このキャッシュを読み込むので一回目にアクセスしたときより速く表示できます。
     1212次に、templates_cディレクトリです。templates_cディレクトリにはSmartyのテンプレートを一度解析して、解析の結果を一時ファイルとして置いています。Smartyのテンプレートもキャッシュをここに置いておくことで次に読み込まれるときに、このキャッシュを読み込むので一回目にアクセスしたときより速く表示できます。
    6371213
    6381214最後に、tmpディレクトリです。tmpディレクトリには一時画像や一時ファイルを保存しておく場所として存在します。 メールで画像を投稿するときに、チェックするために画像を保存する必要があり、一時的にこのtmpディレクトリに保存しています。
     
    6521228
    6531229
    654 このwebappディレクトリがOpenPNEの根幹です。OpenPNEのアクションなどはこのwebappディレクトリに入っています。[[BR]]
     1230このwebappディレクトリがOpenPNEの根幹です。OpenPNEのアクションファイルなどはこのwebappディレクトリに入っています。[[BR]]
    6551231libディレクトリ、modulesディレクトリ、templatesディレクトリ、validateディレクトリの各ディレクトリについてはこの後詳しく見ていきます。
    6561232
     
    6891265 libディレクトリにはいくつかファイルがあります。その中でcontroller.phpというファイルがありますが、この中でOpenPNEのメインの処理を行っています。まずはじめに公開領域であるpubic_html以下のindex.phpが読み込まれたら、このcontroller.phpファイルの中のopenpne_executeという関数が実行されて、使用するモジュールなどを判断しています。
    6901266
    691  それでは主要なディレクトリについて詳しく見てましょう。
     1267 それでは主要なディレクトリについて詳しく見てましょう。
    6921268
    6931269  ==== db ====
     
    7201296 
    7211297  OpenPNEではこのdbディレクトリ以下のファイルをよく使用しています。[[BR]]
    722   例えば、メンバーのidを取得したい場合、member.phpファイル内のdb_member_c_member4c_member_idという関数をコールすると、指定したメンバーの情報が取得出来ます。
     1298  例えば、メンバーのidを取得したい場合、member.phpファイル内のdb_member_c_member4c_member_idという関数を呼ぶと、指定したメンバーの情報が取得出来ます。
    7231299
    7241300  {{{
     
    9261502
    9271503<input type="hidden" name="sessid" value="({$PHPSESSID})">
     1504
    9281505}}}
    9291506