0

私が知る限り、それは基本的にそれです。include/require_once を含まないスクリプトを include または require_once することはできますが、そうすると、PHP から次のエラーがスローされます。

警告: require_once(../constants/constants.php) [function.require-once]: ストリームを開くことができませんでした: C:\Home\Workspace\PHP\DD\src\log\test.php にそのようなファイルまたはディレクトリはありません7行目

致命的なエラー:require_once() [function.require]:必要な '../constants/constants.php' (include_path='.;C:\Program Files\Xampp 1.7.7\php\PEAR') を C: で開くことができませんでした: \Home\Workspace\PHP\DD\src\log\test.php 行 7

パスは正しいです。Apache Web サーバーの構成ファイルを台無しにしてしまったのではないかと心配しています (より適切な URL を作成するために、mod_rewrite を使用する .htaccess ファイルを作成しました)。.htaccess ファイルの内容は次のとおりです。

オプション +FollowSymLinks

RewriteEngine on

RewriteRule !.(gif|jpg|png|css)$ index.php

私のApacheドキュメントルートは「C:/Home/Workspace/PHP」です


更新:絶対パスを使用すると、次のように機能することがわかりました。

require_once $_SERVER['DOCUMENT_ROOT']."/DD/src/constants/constants.php";

相対パスは使用しないと思います。

4

1 に答える 1

3

この理由は、相対パスが最初の require/include を持つファイルからのものであるためです。たとえば、次のようなファイルのグループがあるとします。

|--bar
|   |--foo
|   |   |--foo.php
|   |--bar.php
|--test.php

test.php があった場合

require("./bar/bar.php")

そしてbar.phpが持っていた

require("./foo/foo.php")

相対 URL は作業ディレクトリ (require/include を呼び出した最上位ファイル) に対して相対的でなければならないため、これは失敗します。bar.php を変更するとrequire("./bar/foo/foo.php")、プログラムは正常に完了します。これが起こらないようにする最善の方法は、Basti が述べたように、相対 URL を使用しないことです。dirname(__FILE__)一般に、URL の作成など、さまざまな関数を使用することをお勧めします。

最後に、.htaccess ファイルの書き換えルールは何も実行せず、クライアント側の URL を操作するだけです。混乱が解消されることを願っています。

于 2012-04-10T03:33:28.750 に答える