1

もっといい方法でできるかと聞いてみようと思いました。

ローカル(WAMP)では、すべてのWebサイトがwwwフォルダーにあります。(C:\wamp\www

現在、ファイルを含めるときにこれを行います。

require_once("".$_SERVER['DOCUMENT_ROOT']."/lib/config.php");

ローカルで作業していて、サイトをWebホストにアップロードするとき、パスが壊れないようにしたいです。

誰かが私がこのようにするべきかどうか教えてもらえますか?

最大限の互換性を確保したい。つまり、たとえば、サイトをローカルから使用することにしたWebホストに移動したり、あるホストから別のホストに移動したりしても、パスが壊れることはありません。

たぶんそれを行うためのより防弾の方法がありますか?

4

4 に答える 4

2

を使用する際の問題$_SERVER['DOCUMENT_ROOT']は、PHPスクリプトをディレクトリレベルで上下に移動すると壊れてしまうことです。代わりにこれを使用してください:

require_once(dirname(__FILE__) . "/lib/config.php");

__FILE__スクリプトの絶対パスです。dirname()最後のパスコンポーネント(スクリプトファイル名)を削除して、他のパスコンポーネントを追加できるようにし/lib/config.phpます/../../lib/config.php。これはどこでも機能します。

PHP 5.3ではdirname(__FILE__)、と呼ばれるの省略形が導入されました__DIR__が、これは<5.3では機能しません。

于 2011-04-22T16:52:32.207 に答える
2

インクルードパスが表示されます。そのためには、set_include_pathが役立ちます。

于 2011-04-22T17:25:46.430 に答える
1

私が通常行うことは、いくつかの非常に基本的な定数を使用して1つの構成ファイル(他のファイルを含む場合があります)を作成することです。

define('PROJECT_ROOT', dirname(dirname(__FILE__))); // or dirname(__DIR__) for PHP 5.3
define('PROJECT_WEB', $_SERVER['DOCUMENT_ROOT']);
// etc

私の他のすべてのファイル/インクルードは、これらの非常に単純な定数に基づいています。PROJECT_ROOTとは両方ともPROJECT_WEB「実際」/絶対であるため、相対パスとinclude_pathは必要ありません。

他の有用な(?)定数は、PROJECT_LOGICおよび/またはPROJECT_CONTROLLERSおよび/またはPROJECT_3RD_PARTYなどです。

于 2011-04-22T17:31:13.937 に答える
1

これは、構成ファイルを含めるのに問題なく機能します(ただし、最初の引用符は削除します)

require_once( $_SERVER['DOCUMENT_ROOT'] . "/lib/config.php" );

多数の異なるディレクトリからの設定ファイルを含める場合、これが実際にそれを行う唯一の方法です。

より大きなプロジェクトIDでは、「ほとんどの」開発者はすべてのスクリプトがロードされるフロントコントローラーを持っていると言います。このフロントコントローラーは構成ファイルをロードします。同じファイルには常に構成ファイルが含まれているため、は必要ありません$_SERVER['DOCUMENT_ROOT']

于 2011-04-22T16:51:57.910 に答える