WEBOPIXEL

CakePHPをさくらサーバー(共有)にインストールしてみた

Posted: 2011.05.07 / Category: CakePHP 

さくらサーバーは多くの人が使用しているため情報も多くありますが、それなのになぜかはまってしまったので一応メモです。

Sponsored Link

CakePHP本体のアップロード

「www.example.com」がで公開するとします。
さくらサーバーでは「home->アカウント名 -> www」に「example」ディレクトリを作成して、その下にhtmlファイルを置けば公開できますね。
基本的にCakeはそのままアップロードしても大丈夫な設計になっているようですが、もしものときを考えるとデータベースの設定ファイルを公開ディレクトリ入れておくのはセキュリティ上、よろしくありません。
そこでCake本体はアクセスできないディレクトリに置き、「webroot」内のファイルだけ公開ディレクトリに配置するようにします。

ここでは下図のようにアップロードしたことにします。

CakePHP配置構成

「webroot/index.php」の編集

アップロードしましたが、当然今のままでディレクトリを変えたので動きません。
「webroot/index.php」を編集しましょう。

40行目あたりの「ROOT」と「APP_DIR」の定数を以下のようにします。

webroot/index.php

 
	if (!defined('ROOT')) {
		define('ROOT', DS.'home'.DS.'アカウント名'.DS.'cakemodule');
	}
		
	if (!defined('APP_DIR')) {
		define ('APP_DIR', 'app');
	}
	

これでトップページ(www.example.com)は表示されると思います。

.htaccessを作成

このままだと各アクション(下層)にアクセスしようとすると「Not Found」と表示されます。
これは公開ディレクトリ(example)に以下の「.htaccess」を設定する必要があるようです。

www/example/.htaccess

	<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteBase /
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_URI} !.(cgi|css|gif|jp?g|png)$
	RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
	</IfModule>
	

データベース設定を自動で切り分ける

さくらサーバーではサーバーコントロールパネルから「アプリケーションの設定->データベースの設定」でデータベースの作成およびデータベースの情報を確認することができます。
この情報をもとに「config -> database.php」を修正します。

さくらサーバーのデータベース情報

appディレクトリは更新頻度が高いと思いますので、本番サーバーとテストサーバーで設定ファイルを別けてしまうと、誤りがおこるかもしれません。
下記のように条件分岐すれば、同じファイルで運用することができます。

app/config/database.php

	class DATABASE_CONFIG {
	    var $development = array(
	        'driver' => 'mysql',
	        'persistent' => false,
	        'host' => 'localhost',
	        'login' => 'root',
	        'password' => '********',
	        'database' => 'database',
	        'prefix' => '',
	        'schema' => '',
	        'encoding' => 'utf8'
	    );
	    var $production = array(
			'driver' => 'mysql',
			'persistent' => false,
			'host' => 'host',
			'login' => 'login',
			'password' => '********',
			'database' => 'database',
			'prefix' => '',
			'schema' => '',
			'encoding' => 'utf8'
	    );				
		function DATABASE_CONFIG() {
			$this->default = ($_SERVER['SERVER_ADDR'] == '127.0.0.1') ?
				$this->development : $this->production;
		}
	}
	
参考サイト
[cakePHP]さくらインターネットに導入する(cake本体とwebrootを分ける)[サブドメインで運用]
開発と運用の設定を自動で切り替える フォーラム – CakePHP Users in Japan

LEAVE A REPLY

コードを書く場合は<pre>で囲んでください。