4

私の php プロジェクトでは、コードが移植可能でサーバーに依存しないことを確認したいと考えています。

そこで、いくつかの config-var が設定されているすべての php ファイルに「config.php」を追加しました。

私はそれを含めます

include_once('config.php');

私の問題は、この config.php の最初の変数の 1 つは次のとおりです。

global $path;
$path = $_SERVER['DOCUMENT_ROOT'];

すべてのインクルードを作成するには、絶対的で「ポータブル」が必要です。

もちろん、これは include_once('config.php'); 以降のすべてのインクルードで機能します。-しかし、どうすればこの特定のものを絶対的に含めることができますか?

今のところ私の「解決策」はこのコードです:

//set global path if not yet set
if(!isset($path)){
    global $path;
    $path = $_SERVER['DOCUMENT_ROOT'];
}

すべてのphpファイルに追加します。

よりエレガントなソリューションはありますか?ありがとう!

4

5 に答える 5

3

別の方法は、 $path を静的変数定義として使用することです

define('PATH', $_SERVER['DOCUMENT_ROOT']);

次に、PATHを通常の変数として使用できます

echo 'directory: '.PATH;

変数は大文字と小文字を区別し、大文字と小文字を区別しないようにして、PATH またはパスまたはパスのいずれかを使用できるようにします。最後に true を追加します。

define('DOCROOT', $_SERVER['DOCUMENT_ROOT'], true); 

一般的な使用例は、DIRECTORY_SEPARATOR を短縮することです。

define('DS', DIRECTORY_SEPARATOR, true); 

よろしく、マックス

于 2013-07-03T08:25:39.627 に答える
2

別の方法は、 $path を定義として使用することです。

define('PATH',$_SERVER['DOCUMENT_ROOT']);
于 2013-07-03T08:20:59.717 に答える
1

それは問題ないはずです!もっと良い方法があるかどうかはわかりません. コードが config.php に依存している場合は、require_once('config.php'); を使用することをお勧めします。ファイルが見つからないか含まれていないかのように、スクリプトは終了して致命的なエラーが発生し、その時点以降は続行されません!

于 2013-07-03T08:10:45.793 に答える
0

PHPフレームワークを使用していない場合..それが最善の解決策です.. $_SESSION varに入れたい場合を除きますが、お勧めしません..

于 2013-07-03T08:12:27.580 に答える
0

グローバル変数は地獄への本当に良い方法です。それらを使用することは、おそらくプログラマーができる最悪のことです。初めて見た巨大なプロジェクトで、どのようにしてそれを見つけ、分析する必要がありますか??? 単にあなたはしません。Ctrl+f はOKですが、プロジェクトを ctrl+f してもよろしいですか? さらに、通常、すべてのプロジェクト ファイルにアクセスできるわけではないか、ローカル ディスクにすべてを持っているわけではありません。これは、すべてのコラージュの最初のレッスンのようなものです。グローバル変数は絶対に使用しないでください。静的変数と OOP について聞いたことがありますか? それが進むべき道です。残念なことに、PHP では変数を定数や静的変数に割り当てることができません (静的メソッドで驚くほど機能します - 私はそれをテストしたばかりです - なぜ静的変数ではなく作成者なのでしょうか?) . それがあなたがしていることのすべてだからです。' という変数の名前を変更しています $_SERVER['DOCUMENT_ROOT']' を 'PATH' と呼ばれる別のものに変更します。これは短いですが、それを行う意味は何ですか? 短い != 良い。$_SERVER はすでにスーパーグローバルです (これも悪いことです) が、少なくともそれらのいくつかのスーパーグローバルはすべての人によく知られており、PHP の作成者はそれらを置き換えることができないに違いありません。バージョン)

于 2014-12-04T23:33:35.217 に答える