1

Apache2 および PHP5 を実行している Linux に PHP アプリケーションをインストールしようとしています。

アプリケーションにアクセスしようとすると (たとえば、index.phpファイルにアクセスしようとすると)、ブラウザーが空白のページを返すことに気付きました。ただし、 a を実行してphpinfo()も問題なく動作します。

テストを通じて、問題はアプリケーションのコードにあり、次のような行が失われていることがわかりました。

require_once($_SERVER['DOCUMENT_ROOT'] . '/202-config/functions.php');

これを に変更するとrequire_once('./202-config/functions.php');、アプリケーションは正常に実行されます (少なくともアプリケーションのその部分.

を実行するprint_r($_SERVER)と、DOCUMENT_ROOT空に見えます。

皆さんへの私の質問は次のとおりです。このアプリケーションのすべてのコードを調べてこれらのrequire_onceステートメントを置き換えたくないので、DOCUMENT_ROOT の値を定義する方法はありますか?

ありがとう。

4

3 に答える 3

6

ドキュメントから:

この配列のエントリは、Web サーバーによって作成されます。すべての Web サーバーがこれらのいずれかを提供するという保証はありません。

また、コマンド ラインからスクリプトを実行すると、設定されない場合があります。

回避策は、明示的に設定することです:

if (!isset($_SERVER['DOCUMENT_ROOT']) || empty($_SERVER['DOCUMENT_ROOT']))
    $_SERVER['DOCUMENT_ROOT'] = __DIR__; //or dirname(__FILE__) for older php verstions

注:$_SERVER['DOCUMENT_ROOT']スクリプトを含めるために使用します。__DIR__したがって、定数で__FILE__はなく、定数に依存することをお勧めし$_SERVERます。

于 2013-02-21T11:06:47.043 に答える
1

DocumentRoot "/var/www"Apache-Virtualhost-Config に を設定しましたか? CLI では、このフィールドは空です。その場合、この値を手動で設定できます。

if ($_SERVER['DOCUMENT_ROOT'] == '') {
  $_SERVER['DOCUMENT_ROOT'] = __DIR__;
}

または PHP < 5.2 の場合

if ($_SERVER['DOCUMENT_ROOT'] == '') {
  $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
}
于 2013-02-21T11:04:27.977 に答える
0

次のようなこともできます。

if (empty($_SERVER['DOCUMENT_ROOT'])) {
$_SERVER['DOCUMENT_ROOT'] = './';
}

しかし、これは良い方法ではありません

于 2013-02-21T11:08:33.177 に答える