CakePHPクッキング

テスト環境と本番環境の判定

開発環境:CakePHP2.5.1

基本的な情報はbootstrap.phpにまとめることが多いですが、テスト環境と本番環境の内容をそれぞれ別々に管理するのは大変です。
ファイルを一つにして、プログラムで環境を振り分ける方法を紹介します。

サーバー権限ありの場合

Apacheの設定権限がある場合は、テスト環境のhttpd.confに次のように設定します。

SetEnv DEV_ENV dev

bootstrap.php側では上記で設定した情報でテスト環境か本番環境か判別することができます。

<?php
// テスト環境設定
if (env('DEV_ENV') == 'dev') {
    Configure::write('ENV', 'test');
// 本番環境設定
} else {
    Configure::write('ENV', 'default');
}
?>

サーバー権限なしの場合

レンタルサーバーなどで、サーバーの権限がない場合、かなり強引ですが、次のように設定することで振り分けすることができます。

<?php
$production = false;
$argv = env('argv');
// WEBからのアクセス
if (empty($argv)) {
    if (env('HTTP_HOST') == 'localhost') {
        $production = true;
    }
// コマンドラインからのアクセス
} else {
    if ($argv[env('argc')-1] == '/path/to/cakephp/app') {
        $production = true;
    }
}

// 本番環境設定
if ($production) {
    Configure::write('ENV', 'default');
// テスト環境設定
} else {
    Configure::write('ENV', 'test');
}
?>

通常のWEBからのアクセスはもちろん、SHELL実行時にも対応できます。

DBの切り替え

データベースも本番用とテスト用とで自動切り替えをさせます。
先ほどのbootstrap.phpで設定したENVを使って判別させます。

<?php
public function __construct($id = false, $table = null, $ds = null) {
    $this->useDbConfig = Configure::read('ENV');
    parent::__construct($id, $table, $ds);
}
?>

本番環境でもdebug=2にする方法

テスト環境のみdebug情報を表示させるには、上記の分岐処理を使えばよいのですが、テスト環境では再現されず、どうしても本番で確認したい場合があります。
そんな時は自身のIPからのアクセスの時のみdebug情報を表示するという方法があります。
app/Config/core.php

<?php
Configure::write('debug', 0);
if ($_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx') {
    Configure::write('debug', 2);
}

xxx.xxx.xxx.xxxの部分にご自身のIPアドレスを指定すれば、その時だけdebug=2の表示にすることができます。

WordPressとCakePHPの共存

サイトを作るのに便利なWordPress。プラグインも数多く用意されて

サイトマップの作成方法

Googleのウェブマスターツールに渡すためのサイトマップの作成方法で

INSERTしたIDを取得する

データを保存した後にINSERTされたデータのIDを使って何かの処理を

ファイルの存在確認やフォルダー内のファイル一覧取得

特定のファイルの存在を確認したい場合や特定のフォルダー内にあるファイル

リンクの最後に常にスラッシュをつける方法

URLの最後に常にスラッシュをつけるかつけないかを統一する方法は、UR

countやsumを使う時のフィールド名を指定する

CakePHPでcountやsumなどを使う場合、ちょっとした工夫が必

Formの便利な使い方

問い合わせフォームや会員機能など、WEBサイトを作る際に必ず必要になる

ヘルパーをオーバーライドする

CakePHPで便利な機能が詰まったヘルパーですが、時々もう少しこうだ

特定の時だけSQLの条件を追加するならSet::mergeを使う

SQLの条件を追加したい時に使うのがarray_mergeなどですが、

ページネーションではDISTINCTではなく、GROUP BYを使う

重複したデータを省く時に使うDISTINCTですが、ページ送りで使う時

Model内で別のModelを呼び出す

モデル内で別のモデルを使いたいケースがあった場合、次のようにすることで

CakePHPでGoogleAnalyticsAPIを使う

CakePHPでGoogleAnalyticsを使う方法について見てい

独自のfindを定義するfindMethods

findをより便利に、よりスッキリ書くのに、findMethodsを使

TCPDFを使ってCakePHPでPDFを作成

CakePHPでPDFを作成するには幾つかの方法がありますが、今回はT

JavaScriptをコードの最下部に配置

SEOの観点からJavaScriptのコードは一番下に記述したいところ

無限スクロールをさせる

TwitterやFacebookのタイムラインを見ていて、ページの下に

PHPExcelの導入

ExcelにDBのデータを表示して一覧を作ったり、請求書などのフォーマ

Warning: SplFileInfo::openFile〜の警告が表示されたら

ShellとWEBの両方で同一のModelを呼び出す時に「Warnin

連結されていないデータを抽出

通常、テーブルを連結してデータを取得するには、アソシエーションを利用し

データを取得する

データを取得したい時に少し変わった条件で取得したい場合があります。

PAGE TOP ↑