web-dev-qa-db-ja.com

PHP require()相対パスエラー

私は次のファイル構造を持っています:

 rootDIR 
 dir1 
 subdir1 
 file0.php 
 file1.php 
 dir2 
 file2.php 
 file3.php 
 file4.php 

file1.phpは、次のようにdir2のfile3とfile4を必要とします。

require('../../dir2/file3.php')

file2.phpが必要file1.php このような :

require('../dir1/subdir1/file1.php')

しかし、その後file1でrequireはfile3とfile4を開くことができません(おそらくパスの相対的性のため)

しかし、理由は何ですか、file2.php そう file1.php適切にfile3とfile4が必要

41

次のように、パスの前にdirname(__FILE__)を追加してみてください。

require(dirname(__FILE__).'/../../dir2/file3.php');

ルートディレクトリから始まるファイルを含める必要があります

53
Baronth

相対パスの場合、dirname(__FILE__)ではなく__DIR__を直接使用できます( PHP 5.3.0以上)を使用している場合 ):

require(__DIR__.'/../../dir2/file3.php');

パスの先頭に引用符で囲んで追加のスラッシュを忘れずに追加してください。

見る:

48
SharpC

ここでの適切なアドバイスは、Webアプリで「../../」相対パスなどを絶対に使用しないことです。読みづらく、メンテナンスが大変です。

  1. あなたが証明できるように。何を指しているのかを知るのは非常に困難です。

  2. アプリケーションまたはその一部のフォルダーレベルを変更する必要がある場合。それは完全にエラーを起こしやすく、デバッグするのが恐ろしい何かを壊す可能性があります。

代わりに、メインパスのbootstrap=)ファイルにいくつかの定数をdefineしてから、次を使用します。

require(MY_DIR.'/dir2/file3.php');

そこからアプリを移動するのは、MY_DIR定数を1つのファイルに置き換えるのと同じくらい簡単です。

5
hexalys

相対パスに頼るのではなく、常に$_SERVER['DOCUMENT_ROOT']を有効な開始点として使用することもできます。ちょうど別のオプション。

require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
0
Grant