1

それで、今日は本当に奇妙なことに出くわしました。

PHP APC を最新バージョンに更新し、Apache を再起動しました。そして突然、Apache のすべてのスクリプトが、必要なファイルが見つからないという不平を言い始めました。

私は通常持っているでしょう:

require_once 'Abstract.php'

Abstract.php が他のスクリプトと同じディレクトリにあることを考慮してください。

エラー:

PHP 警告: require_once(Abstract.php) [function.require-once]: ストリームを開くことができませんでした: 行 411 の data.php にそのようなファイルまたはディレクトリはありません'Abstract.php' (include_path='/var/www/application/../library:/var/www/library:.:/usr/share/php:/usr/share/pear') の data.php on 411行目

ご覧のとおり、現在のディレクトリ (.) は実行の include_path に含まれています。なぜこれが起こったのですか?誰もそれを見たことがありますか?

4

2 に答える 2

1

私の知る限り、.PHPバイナリが存在するディレクトリを示します。require*およびinclude*関数は、現在の作業ディレクトリを考慮に入れます。これは、 で変更できますchdir()

cwallenpooleで提案されたように、次の__DIR__定数を使用してみてください。

require_once __DIR__ . '/Abstract.php';

それも失敗する場合は、他の場所に構成ミスがあることを意味します。動作する場合は、現在実行中の PHP スレッドの作業ディレクトリが別の場所に設定されている可能性があり、現在の作業ディレクトリを変更するか、require絶対パスを使用するようにステートメントを変更する必要があります。

また、オートロード コールバックの使用を検討しましたか? そうすれば、クラスを検索するための単一のエントリ ポイントが得られます。

于 2011-05-12T09:00:02.470 に答える
0

わかりました、私は最終的にそれを理解しましたが、他の誰かが私と同じ問題に遭遇した場合に備えて共有する必要があります.

以前は APC 3.0.x を使用していましたが、3.1.8 にアップグレードしました。3.1.8 の APC には、PHP の include/require を壊すバグがあるようです。

ここの相対リンクを参照してください: http://pecl.php.net/bugs/bug.php?id=22687

迅速なフィードバックをありがとうございました:)

于 2011-05-13T07:22:51.013 に答える