人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP+MySQLによるWebアプリケーションについて、参考意見をお聞かせください。

アプリケーション内で、DB情報やコンフィグ情報など、各ソースファイルで共通のファイルをinclude(require)すると思いますが、
1.どのようなコンフィグファイルにするか?
2.そのファイルをどこに置くか?
3.どのようにファイルを呼び出すか?
という点でいつも悩んでしまいます。

現時点では
1.PHPの連想配列
2.public_htmlより上の階層のどこか
3.require_once('ファイルへのルートパス');
とすることが多いのですが、3が煩わしいです。
ローカルテストと本番とでパスが違うため、わざわざその処理を全ページに書くのも・・・
public_htmlより上の階層とはいえDB情報などを平文で書いているのも少し気がかりです。

皆さんは1?3をどうしていますでしょうか。

●質問者: indiana
●カテゴリ:インターネット ウェブ制作
✍キーワード:DB MySQL PHP require Web
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● b-wind
●20ポイント

1.PHPの連想配列

これはまぁ Apache の環境変数から取得するなりほかの方法もあるけど、あんまり大差ないですね。

結局何らかの方法で最終的にPHPの変数として取り出せることが絶対条件になりますから。

2.public_htmlより上の階層のどこか

これはアプリの作り次第ですが、DocumentRoot と同階層で、Apache の公開ディレクトリでない場所に置きますね。

名前等はまぁわかるようになっていれば特にこだわりはありません。


3.require_once('ファイルへのルートパス');

.htaccess や Apache の設定ファイルで include_path を設定してやればいいです。

もしくはPHP側でも、相対パスで書くことも可能です。

require_once( dirname(__FILE__) . '/../path/to/lib/lib.inc.php' );

とか。

この場合ドキュメントルートからの相対位置が決まっていないとだめですけど。

◎質問者からの返答

なるほどhtaccessのinclude_pathならどこからでも同じように参照できますね。

require_once( dirname(__FILE__) . '/../path/to/lib/lib.inc.php' );

のように普通に相対パスで取得するのと速度的には同じ・・・ですかね。


2 ● pahoo
●20ポイント

1.どのようなコンフィグファイルにするか?

プログラムの内容によって千差万別です。

一般論としては、共通クラスを外部ファイルに持たせるのがスマートだと思います。


2.そのファイルをどこに置くか?

公開されていない位置であれば十分だと思います。public_htmlより上か下かという問題ではありません。

平文であることを気にされているようですが、メインのPHPスクリプトも平文ですのでリスクは一緒です。

心配でしたら、Zend Guardでスクリプト全体をバイナリ化、暗号化するという手があります。

また、


3.どのようにファイルを呼び出すか?

これも case by case ですが、require_once が一般的ではないでしょうか。


むしろ、「ローカルテストと本番とでパスが違う」ということの方が問題です。

requireでエラーが発生しなかったとしても、プログラムの他の部分にパス指定ミスがあり、本番環境へ移行してからエラーが発生するということが起こり得ます。最も厄介なのが、たまにしか発生しない条件でパス指定ミスの処理に入るケースです。

パスを define しておくなどの工夫が必要です。

◎質問者からの返答

1については呼び出す処理が内容によって変わるということですね。

なるほどスクリプト全体を暗号化すると安心ではありますが管理がややこしくなりそうですね・・・そこは妥協しようと思います。

>requireでエラーが発生しなかったとしても、プログラムの他の部分にパス指定ミスがあり、本番環境へ移行してからエラーが発生するということが起こり得ます。

それも起こりえますが、そのミスを無くすためにコンフィグファイルにできるだけこまかくパス設定などを書いておきたいと思います。


3 ● fonya3
●20ポイント

拡張子を.phpにしてプログラムと同じ階層においてinclude()するのはいかがでしょうか?

こりゃ、手抜きかもしれませんが、拡張子が.phpなら、万が一直呼びされても白いページが出るだけですので。。。

ダミー:

http://www.2ones.com/geeklog_000/

◎質問者からの返答

現在はおっしゃるように「.php」でやっています。

そのphpファイルをrequire等で呼び出す際に、「../」など相対パスで呼び出すと階層が変わった時などに修正が面倒で・・・

その煩わしさをなるべく無くしたいです。


4 ● yawaraseisaku
●20ポイント

1.どのようなコンフィグファイルにするか?

php.ini形式のファイルを使用し、

parse_ini_file()関数で呼び出すようにしています。



2.そのファイルをどこに置くか?


public_htmlの外に置いています。



3.どのようにファイルを呼び出すか?


フロントコントローラ形式を使用し、

public_html以下に配置するPHPファイルは、index.phpのみとし、

実際のプログラムは、public_htmlの外に置いておきます。


そのディレクトリについて、


define( "APP_DIR", dirname(__FILE__) . '/../app/' );

と定数定義しておき、このAPP_DIRを使いまわす、という方法をとっています。

$ary_db_info = parse_ini_file(APP_DIR. "config/db.ini");

として、必要な情報を呼び出すようにしています。


もし、各ソースにて APP_DIR. "config/db.ini" という記述をするのが嫌であれば、

グローバルな関数を一つ定義して、そこに記述すればよいのではないでしょうか。

function get_db_info()
{
 return parse_ini_file(APP_DIR. "config/db.ini");
}
◎質問者からの返答

parse_ini_fileという関数は知りませんでした。

php.ini形式なら少し見やすいですね。使えそうです。

public_html以下にはindex.phpのみというのは思い切りがいいですね。


5 ● t_shiono
●20ポイント

他の方と重なる部分もありますが、

1.どのようなコンフィグファイルにするか?

内容によって変えることが多いです。

DBのアクセス情報など4つ程度で、個々に意味がはっきりしていると、defineしちゃう方が多いですね。

逆に要素数が多いと、配列 or 連想配列なんかに押し込めます。この辺りは利用方法にも依存するでしょう。

2.そのファイルをどこに置くか?

3との兼ね合いもありますが、公開ディレクトリ外ならどこでもいいかと思います。

CakePHPを使うことが多いですが、その他も含めてフレームワークを使うとそれぞれ設定ファイル用のディレクトリがあると思うので、それに準じるのが適当でしょうね。

3.どのようにファイルを呼び出すか?

フレームワークを使わない場合は、ドキュメントルートなど、どのファイルからもアクセス可能な場所にconfig.phpのようなファイルを用意し、

<?php
require_once (実際のパス);
?>

のようにする場合が多いですかね。

それほど重要じゃない定数なんかはここで定義しちゃったりもできますし。

何かの参考になれば。

◎質問者からの返答

やはりおっしゃるような形式が一般的のようですね。

CakePHPなどオープンソースのものの構造なども参考にしてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ