プロジェクトを作ったらまずやること

Ethna 2.3.6で

$ ethna add-project sample

した後。

ローカルと本番サーバで配置するパスが違ったり、本番サーバに勝手にPEARパッケージをインストールすると他のプロジェクトに影響したりするかもしれないので、

  • プロジェクトの外のファイルに依存しない
  • 絶対パスは排除

な方向で。

ディレクトリ構成をいじる

$ mv sample project
$ mkdir sample
$ mv project sample/
$ mv sample/project/www/* sample
$ rm -r sample/project/www

こうなる。

.
`-- sample
    |-- css
    |-- js
    `-- project
        |-- app
        |   |-- action
        |   |-- action_cli
        |   |-- action_xmlrpc
        |   |-- filter
        |   |-- plugin
        |   |   |-- Filter
        |   |   `-- Validator
        |   |-- test
        |   `-- view
        |-- bin
        |-- etc
        |-- lib
        |-- locale
        |   `-- ja
        |       `-- LC_MESSAGES
        |-- log
        |-- schema
        |-- skel
        |-- template
        |   `-- ja
        `-- tmp

エントリポイントのrequire_onceのパスをいじる。

sample/index.php

<?php
require_once dirname(__FILE__).'/project/app/Sample_Controller.php'; // ここ

Sample_Controller::main('Sample_Controller', 'index');
?>

sample/project以下をアクセス禁止にする

sample/project/.htaccess

order deny,allow
deny from all

pear-localの設定

$ cd sample/project
$ ethna pear-local

プロジェクト内にPEARの設定ファイルが作成される。「ethna pear-local config-show 」して、フルパスになってるものを相対パスに変更、あとdownload_dirをlibからtmpに変更。

$ ethna pear-local config-set bin_dir bin
$ ethna pear-local config-set doc_dir lib/.pear/doc
$ ethna pear-local config-set ext_dir lib/.pear/ext
$ ethna pear-local config-set php_dir lib
$ ethna pear-local config-set cache_dir tmp/.pear/cache
$ ethna pear-local config-set data_dir lib/.pear/data
$ ethna pear-local config-set download_dir tmp/.pear/download
$ ethna pear-local config-set temp_dir tmp/.pear/temp
$ ethna pear-local config-set test_dir lib/.pear/test

必要なPEARパッケージをインストール

$ ethna pear-local channel-update pear.php.net
Updating channel "pear.php.net"
Update of Channel "pear.php.net" succeeded

$ ethna pear-local channel-discover pear.ethna.jp
Adding Channel "pear.ethna.jp" succeeded
Discovery of channel "pear.ethna.jp" succeeded

$ ethna pear-local install -a pear
downloading PEAR-1.7.2.tgz ...
Starting to download PEAR-1.7.2.tgz (302,744 bytes)
.....................done: 302,744 bytes
downloading Archive_Tar-1.3.2.tgz ...
Starting to download Archive_Tar-1.3.2.tgz (17,150 bytes)
...done: 17,150 bytes
downloading Structures_Graph-1.0.2.tgz ...
Starting to download Structures_Graph-1.0.2.tgz (30,947 bytes)
...done: 30,947 bytes
downloading Console_Getopt-1.2.3.tgz ...
Starting to download Console_Getopt-1.2.3.tgz (4,011 bytes)
...done: 4,011 bytes
downloading XML_RPC-1.5.1.tgz ...
Starting to download XML_RPC-1.5.1.tgz (32,215 bytes)
...done: 32,215 bytes
install ok: channel://pear.php.net/Archive_Tar-1.3.2
install ok: channel://pear.php.net/Structures_Graph-1.0.2
install ok: channel://pear.php.net/Console_Getopt-1.2.3
install ok: channel://pear.php.net/XML_RPC-1.5.1
install ok: channel://pear.php.net/PEAR-1.7.2
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

$ ethna pear-local install -a ethna/ethna
WARNING: "pear/DB" is deprecated in favor of "pear/MDB2"
downloading Ethna-2.3.6.tgz ...
Starting to download Ethna-2.3.6.tgz (183,262 bytes)
......................................done: 183,262 bytes
downloading DB-1.7.13.tgz ...
Starting to download DB-1.7.13.tgz (132,246 bytes)
...done: 132,246 bytes
downloading Smarty-2.6.22.tgz ...
Starting to download Smarty-2.6.22.tgz (69,414 bytes)
...done: 69,414 bytes
downloading simpletest-1.0.1.tgz ...
Starting to download simpletest-1.0.1.tgz (273,378 bytes)
...done: 273,378 bytes
install ok: channel://pear.ethna.jp/Ethna-2.3.6
install ok: channel://pear.php.net/DB-1.7.13
install ok: channel://pear.ethna.jp/Smarty-2.6.22
install ok: channel://pear.ethna.jp/simpletest-1.0.1

コントローラのインクルードパス設定をいじる

sample/project/app/Sample_Controller.php

<?php

$app = BASE . "/app";
$lib = BASE . "/lib";
//ini_set('include_path', implode(PATH_SEPARATOR, array($app, $lib)) . PATH_SEPARATOR . ini_get('include_path'));
ini_set('include_path', implode(PATH_SEPARATOR, array($app, $lib)));

プロジェクト内のファイルだけ参照するようにする。
できあがり。

動作確認

projectディレクトリに移動して

$ bin/ethna -v

して動けばOK。今後はこのethnaコマンドを使う。