[Zend Framework] レンタルサーバに Zend Framework をインストールする

レンタルサーバとしてますが ZendServer を用いない、通常の方法です。
インストールというか設置ですね。

Contents

想定ディレクトリ構成

こんなディレクトリ構成を想定して設定していきます。

./home/<あなたの契約ID>
├── projects
│   └── sample
│       └── public
└── public_html
    └── www
        └── sample
  • projects/sample が zf で作成したプロジェクトディレクトリ。
  • public_html が公開ディレクトリ。
  • http://www.foo.com/sample のような形式でアクセスできるように設定。

契約しているレンサバが、サブドメインとかそういった名前のサービス付きならば、http://sample.foo.com とか http://sample.com とかの設定もできると思います。

composer で ZF1 をインストール

いまは zendframework1 も composer でインストールできるんですね。

home/<あなたの契約ID>/composer.json
{
      "require": {
          "zendframework/zendframework1": "1.12.*@dev"
      }
}

公開ディレクトリの設定変更

./home/<あなたの契約ID>
├── projects
│   └── sample
│       └── public
└── public_html
    └── www
        └── sample

projects/sample/public 内の index.php, .htaccess をレンタルサーバの公開ディレクトリへコピーします。

$ cp projects/sample/public/index.php public_html/www/sample/
$ cp projects/sample/public/.htaccess public_html/www/sample/

以下、ファイルの内容を現在の構成にあわせて書き換えていきます。
最初の行でインストールした ZendFramework1 を読み込むようにしています。

public_html/www/sample/.htaccess
php_value include_path ".:/home/<あなたの契約ID>/vendor/zendframework/zendframework1/library"
SetEnv APPLICATION_ENV production
RewriteBase /sample
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

path がおかしくならないよう RewriteBase も書いておきます。
APPLICATION_ENV も便利なので設定しておきましょう。

public_html/www/sample/index.php
// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../../projects/sample/application'));

もしくは、index.php, .htaccess をコピーせず、代わりに symlink という選択肢もあります。

$ ln -s ~/projects/sample/public/ ~/public_html/apps/sample

この場合は、public/ 以下のファイルを使うことになります。
パスの修正は必要ないですね。

autoload.php

下記のように書いた部分ですが、

public_html/www/sample/.htaccess
php_value include_path ".:/home/<あなたの契約ID>/vendor/zendframework/zendframework1/library/"

他の Composer パッケージを使うことを考えると、このようにしておいた方が良いのかもしれないですね。

public_html/www/sample/index.php
require_once __DIR__ . '/../../../vendor/autoload.php';