CPI のサブドメインが使える共用サーバで運営中のサイトにテスト環境を構築するメモ。
そもそも何が問題? そして、この環境で実現したい事 ———————————————————————-
更新を簡単にするため、ヘッダー部分を PHP でインクルードする仕組みを採用。 テストが終わったファイルを本番化する場合は、テスト環境のファイルを本番環境にコピーします。
理想のテスト環境を作る条件など
– テスト環境のファイルを本番環境にコピーする時に、ファイルの中身を書き換えるのは面倒なので嫌。 – テスト環境のヘッダー部分をクリックしても、本番環境にジャンプしないようにする。 – /usr/home/xxxx/html/test/head.php は各環境でひとつしか無いので、環境に合わせて書き換える。
現在の状況 ( ドキュメントルートからパスを書いている ) ———————————————————————-
現在の状況は次のようになっています。
usr |
└ home |
└ xxxx | ← ユーザー名
├ html | example.com ( 本番環境 )
│ ├ head.php | <a href="/index.php">Home</a>
│ └ index.php | <!--<? include("/usr/home/xxxx/html/head.php"); ?>-->
└ virtual |
└ test | test.example.com ( テスト環境 )
├ head.php | <a href="/index.php">Home</a>
└ index.php | <!--<? include("/usr/home/xxxx/html/head.php"); ?>-->
問題点
– /usr/home/xxxx/html/test/head.php が、どのファイルからも参照されない。 – head.php は SSL 領域でも使いたいので、http:// から始まる絶対パスで書いておきたい。
リンクを絶対パスから書く場合 ———————————————————————-
現在の状況は次のようになっています。
usr |
└ home |
└ xxxx | ← ユーザー名
├ html | example.com ( 本番環境 )
│ ├ head.php | <a href="http://example.com/">Home</a>
│ └ index.php | <!--<? include("/usr/home/xxxx/html/head.php"); ?>-->
└ virtual |
└ test | test.example.com ( テスト環境 )
├ head.php | <a href="http://test.example.com/">Home</a>
└ index.php | <!--<? include("/usr/home/xxxx/html/head.php"); ?>-->
問題点
– やっぱり、/usr/home/xxxx/html/test/head.php が、どのファイルからも参照されない。
本番・テスト環境それぞれで PHP の include_path を書き換える ———————————————————————-
PHP の include_path と言うのを使うと、インクルードファイルが見つからない時、次にファイルを探しに行くディレクトリを指定できるんだそうな。 ただ、CPI の場合、.htaccess に php_value の設定があると 500 のエラーが出るので、include_path の設定は php.ini に書かないといけないみたい。
本番・テスト環境とも index.php には次のように書いておきます。
<!--<? include("head.php"); ?>-->
/usr/home/xxxx/html/.htaccess の中身 ( 本番環境 )
## 独自に設定した php.ini ファイルの場所を指定する
suPHP_ConfigPath /usr/home/xxxx/html/
/usr/home/xxxx/html/php.ini の中身 ( 本番環境 )
include_path = “.:/usr/home/xxxx/html”
/usr/home/xxxx/virtual/test/.htaccess の中身 ( テスト環境 )
## 独自に設定した php.ini ファイルの場所を指定する
suPHP_ConfigPath /usr/home/xxxx/virtual/test/
/usr/home/xxxx/virtual/test/php.ini の中身 ( テスト環境 )
include_path = “.:/usr/home/xxxx/virtual/test”
独自の php.ini を設置するのがセキュリティー的に問題ないか判断できなかったので、この方法は試していませんし、うまくいくかどうかも検証していません。 ゴメンナサイ (T_T)
参考にさせてもらったページ
– こんにちは。PHP ファイルの include に関する質問です。 – 人力検索はてな – include_path:とことん!ホームページ
ありがとうございます。
ドメインによって読み込むファイルを変える ———————————————————————-
次のコードで出来ました。
<?php if ( $_SERVER['SERVER_NAME'] == "example.com" ){
include("/usr/home/xxxx/html/head.php");
} else {
include("/usr/home/xxxx/virtual/test/head.php");
}
?>
各ファイルの中にドメイン名を書いてしまうと、ドメインが変更になった時に修正が大変。 何処か一箇所だけ書き換えれば済むような設計にしたい。
<!--<?
if( substr(dirname(FILE),0,30) == “/usr/home/xxxx/virtual/test” ) { $include_base =”/usr/home/xxxx/virtual/test”; } else { $include_base =”/usr/home/xxxx/html”; } include($include_base . “/common/share/header.php”); ?>–>
↑ 良くわかりませんが、上のような方法もあるようです。