4

別のフォルダーにあるphpファイルから「ライブラリ」ファイルを要求しようとしていますが、サブフォルダーからそれらにアクセスしようとするとエラーが発生します。たとえば、私はそのようなディレクトリを持っています:

+ home    
- file1.php

 ++ subfolder
  - file2.php

 ++ libraries
  - code_generator.php
  - database_library.php

code_generator.phpは、他のライブラリにも依存しています。

(LINE 25) require_once(realpath("./libraries/database_library.php"));
//this works fine when called from file1.php, but not from file2.php

./subfolder/file2.phpからcode_generatorを次のように呼び出そうとします

chmod("../libraries/codegenerator.php", 0777);  // for the error at the end of this question
require_once("../libraries/code_generator.php");

file2.phpを実行すると、2つのエラーが発生します。

**Warning**: require_once(C:\xampp\htdocs\home\subfolder): failed to open stream: Permission denied in C:\xampp\htdocs\home\libraries\code_generator.php on line 25

**Fatal error**: require_once(): Failed opening required '' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\home\libraries\code_generator.php on line 25

*25行目はrequire_once(realpath("./libraries/database_library.php"));

4

2 に答える 2

3

ファイルが存在しませ

エラーメッセージは次のとおりです。

警告:require_once(C:\ xampp \ htdocs \ home \ subfolder):ストリームを開くことができませんでした:

と:

開くことができませんでした''

エラーメッセージがうそをつくことはありません(まあ、ほとんどありません)。したがって、次のよう呼び出します。

require_once('');

欠落しているファイルに対してRealpathはfalseを返します

Realpathに、存在しないファイルへのパスを渡すと、falseが返されます。

$return = realpath('this/doesnt/exist.foo'); // $return is false

したがって、realpathに渡される引数はファイルを参照しません。これが、パスが機能しない理由です。

realpathを使いすぎないでください

realpathの使用を削除すると、エラーメッセージがおそらく明白であることがわかります。推測では、これC:\xampp\htdocs\home\subfolder\libraries\database_library.phpに欠落しているため、含めようとしています。.

25行目はrequire_once(realpath("./libraries/database_library.php"));

代わりに、ルートパスを定義するだけの場合:

define('ROOT', 'C:\xampp\htdocs\home\\');

次に、この種の問題が発生しないことを絶対的に確信して、この定数を使用できます。

require_once(ROOT . "libraries/database_library.php");

また、パスを間違えた場合、エラーメッセージによって問題が何であるかが明らかになります。

于 2013-02-08T16:04:31.220 に答える
3

PHPスーパーグローバル変数$_SERVER['DOCUMENT_ROOT']を使用して、サーバードキュメントルートへのフルパスを取得できます。/ var / www / website/public。

コードは次のようになります。

require_once $_SERVER['DOCUMENT_ROOT'] . '/libraries/database_library.php';

このように、ドキュメントのルートパスを手動で設定する必要はありません。PHPは常にそれを取得し、サーバードキュメントルート内にあるすべてのPHPファイルの$_SERVER['DOCUMENT_ROOT']で利用できるようにします。

于 2016-04-21T20:50:33.623 に答える