基本的なインストール

ディストリビューションの/libs/ディレクトリにSmartyライブラリファイルをインストールして下さい。 これらのphpファイルは編集すべきではありません。ライブラリファイルは全てのwebアプリケーション間で共有され、 Smartyの新しいバージョンにアップグレードする際はこれらをアップデートするのみです。

例 2-1. Smartyライブラリファイル

Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
/core/*.php (これら全て)
/plugins/*.php (これら全て)

Smartyはライブラリファイルがインストールされたディレクトリパスを表す SMARTY_DIRという名のphp定数を持っています。基本的に、 あなたのアプリケーションがSmarty.class.phpファイルを見つける事が出来るなら SMARTY_DIRを定義する必要はありません。Smartyは自分でそれを考えます。したがって、もし Smarty.class.phpがinclude_pathにないか、あなたのアプリケーションにて それらへの絶対パスが指定されていないなら、手動でSMARTY_DIRを定義する必要があります。SMARTY_DIRは おわりにスラッシュを含む必要があります。

次の例は、あなたのphpスクリプト内でどのようにSmartyのインスタンスを作成するかについてです:

例 2-2. Smartyのインスタンスを作成する

<?php
require('Smarty.class.php');
$smarty = new Smarty;
?>

次のスクリプトを実行してみて下さい。Smarty.class.php file could not be found というエラーが出た場合は、以下のいずれかを行う必要があります。

例 2-3. ライブラリファイルの絶対パスを指定する

<?php
require('/usr/local/lib/php/Smarty/Smarty.class.php');
$smarty = new Smarty;
?>

例 2-4. phpのinclude_pathにライブラリディレクトリを追加する

<?php
// php.iniを編集し、include_pathにSmartyのライブラリディレクトリを追加して
// webサーバをリスタートしたなら、以下を行ってください。
require('Smarty.class.php');
$smarty = new Smarty;
?>

例 2-5. 手動でSMARTY_DIR定数を定義する

<?php
define
('SMARTY_DIR', '/usr/local/lib/php/Smarty/');
require(
SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
?>

これでライブラリファイルは正常に設置できたので、今度はあなたのアプリケーションのためにSmartyのディレクトリを セットアップしましょう。Smartyはtempalates,templates_c, configs, cacheと(デフォルトでは)名付けられた4つのディレクトリが 必要です。それらはSmartyクラスのプロパティ$template_dir, $compile_dir, $config_dir, $cache_dir によって各々定義する事ができます。 Smartyを使用する各アプリケーションのこれらのディレクトリは、アプリケーション毎に区別してセットアップする事が 高く推奨されます。

あなたはwebサーバのドキュメントルートの位置を知っている必要があります。例ではドキュメントルートは "/web/www.mydomain.com/docs/"です。SmartyディレクトリはSmartyライブラリによってのみアクセスされ、webブラウザから 直接アクセスされる事はありません。したがってセキュリティの心配を避けるためにドキュメントルートに これらのディレクトリを配置する事が推奨されます。

インストール例としてゲストブックアプリケーションのSmarty環境をセットアップしています。 私達は命名規約のディレクトリの目的についてのみ取り上げました。あなたはアプリケーションの名前を "ゲストブック"からあなたのアプリケーション名に置き換えて同じ環境を使用する事ができます。 例では、これら全てのディレクトリは"/web/www.mydomain.com/smarty/guestbook/"の下に置かれています。

ドキュメントルート下には最低1つのファイルが必要であり、それはwebブラウザによってアクセスされるスクリプトです。 この例ではドキュメントルート下に"/guestbook/"というサブディレクトリを置き、スクリプト"index.php"を呼び出しています。

テクニカルノート: "index.php"がデフォルトのディレクトリインデックスとして識別されるようにwebサーバーをセットアップすると便利です。 そうすれば、もし"http://www.mydomain.com/guestbook/"にアクセスされた時にURLに"index.php"がなくても "index.php"スクリプトが実行されます。 apacheのあなたのディレクトリインデックスの設定(各エントリは空白によって分けられる)の最後に "index.php"を追加する事により可能です。

ここまでのファイル構造を見てみましょう。

例 2-6. ファイル構造の例

/usr/local/lib/php/Smarty/Smarty.class.php
/usr/local/lib/php/Smarty/Smarty_Compiler.class.php
/usr/local/lib/php/Smarty/Config_File.class.php
/usr/local/lib/php/Smarty/debug.tpl
/usr/local/lib/php/Smarty/core/*.php
/usr/local/lib/php/Smarty/plugins/*.php

/web/www.mydomain.com/smarty/guestbook/templates/
/web/www.mydomain.com/smarty/guestbook/templates_c/
/web/www.mydomain.com/smarty/guestbook/configs/
/web/www.mydomain.com/smarty/guestbook/cache/

/web/www.mydomain.com/docs/guestbook/index.php

Smartyは$compile_dir$cache_dirにライトアクセスする必要があるので webサーバのユーザがこれらに書き込める必要があります。webサーバのユーザは通常、ユーザ"nobody"とグループ"nobody"です。 OS Xユーザの場合、デフォルトはユーザ"www"とグループ"www"です。 もしApacheを使用しているなら、何のユーザとグループが使われているかを知るためには httpd.conf(通常は"/usr/local/apache/conf/")を見る事が出来ます。

例 2-7. ファイルのパーミッション設定

chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/templates_c/
chmod 770 /web/www.mydomain.com/smarty/guestbook/templates_c/

chown nobody:nobody /web/www.mydomain.com/smarty/guestbook/cache/
chmod 770 /web/www.mydomain.com/smarty/guestbook/cache/

テクニカルノート: chmod 770 はしっかりとしたセキュリティになるでしょう。これは、ユーザ"nobody"とグループ"nobody"のみに ディレクトリのリード/ライトアクセスを許可します。もし誰にでもリードアクセスを可能にしたい場合 (たいていはあなた自身がこれらのファイルを見るための便利さのため)は、代わりに 775 を使う事が出来ます。

私たちはSmartyが読み込む"index.tpl"ファイルを作成する必要があります。これは$template_dirの中に置かれるでしょう。

例 2-8. /web/www.mydomain.com/smarty/guestbook/templates/index.tpl を編集する

{* Smarty *}

Hello, {$name}!

テクニカルノート: {* Smarty *} はテンプレートのコメントです。これは必須ではありませんが、全てのテンプレートファイルのはじめに コメントを書くのは良い習慣です。これはファイルの拡張子に関わらずにファイルを認識する事を簡単にします。 例えば、テキストエディタはファイルを認識して特有の書式ハイライトを有効にします。

では、index.phpを編集しましょう。Smartyのインスタンスを作成し、テンプレート変数を割り当て、 index.tplファイルを表示します。この例の環境では、"/usr/local/lib/php/Smarty"がinclude_pathです。 例と同一にするか、絶対パスを使用して下さい。

例 2-9. /web/www.mydomain.com/docs/guestbook/index.php を編集する

<?php

// Smartyライブラリを読み込む
require('Smarty.class.php');

$smarty = new Smarty;

$smarty->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/';
$smarty->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/';
$smarty->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/';
$smarty->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';

$smarty->assign('name','Ned');

$smarty->display('index.tpl');
?>

テクニカルノート: この例では、Smartyのディレクトリすべてを絶対パスで設定しています。 もし、phpのinclude_path中に'/web/www.mydomain.com/smarty/guestbook/'があるなら、 これらの設定は必要ありません。けれどもこれらに絶対パスをセットする事で より効率的で、(経験から)よりエラーが少なくなります。 こうすればSmartyはあなたが意図したディレクトリからファイルを確実に取得できます。

では、webブラウザからindex.phpファイルを読み込んでみましょう。"Hello, Ned!"が表示されましたか?

これでSmartyの基本的なセットアップは完了しました!