2009-08-21 17 views
1

インクルードファイルに別のファイルが含まれていてもドットプレフィックスが付いている場合、インクルードに問題があります。例えば、3つのファイルがあります - inc1.phpinc2.php、およびSUBDIR/test.phpを、その内容がある -PHPインクルードパス - "./"接頭辞で参照されるファイルがインクルードされない場合

サブディレクトリ/ test.phpを:

set_include_path(get_include_path().":../:../."); 
require("inc1.php"); 

inc1.php:

require("./inc2.php"); 

inc2.php

echo "OK"; 

このツリーは、がストリームを開くことに失敗して失敗します。このようなファイルまたはディレクトリはありません。エラー。 inc1.phpに単純なものが含まれている場合に動作します。require( "inc2.php");、接頭辞「./」は付いていません。追加した "../。"それを動作させる試みとしてインクルードパスに追加しましたが、それは効果がありませんでした。

"./"接頭辞付きのインクルード以外は、inc1.phpとinc2.phpが書き込み可能でないと仮定した場合の解決策は何ですか?subdir/test.phpのみ変更できますか?あなたはまだtest.php内からinc1.phpを含めることができますか?

参考までに、PHP 5.2.9を使用しています。

include(dirname(__FILE__)."/inc2.php"); 

それは頭痛のすべての方法を保存します。

答えて

6

は常にあなたがそうしない(非常に)やむを得ない理由がない限り、次のスタイルを使用しています。

+1

... PHP 5.3には 'dirname(__ FILE __)'と同じ '__DIR__'という名前のマジック定数もあります。 –

+0

私はまだPHP4を使用している人を知っています。したがって、私は下位互換性のために最新かつ最高の定数を使用しない方が良いですが、あなたは正しいです。 –

+0

私はこれをさまざまなスクリプトで使用しようとしています。 Wordpressは常にその慣習に従わない。したがって、taht inc1.phpとinc2.php *の前提は変更できません:)私はtest.phpを編集するだけの解決策が必要です。 – Tristan

0

単純なchdir()がこれに対応しているようです。 test.phpを変更すると:

chdir("../"); 
require("inc1.php"); 

「./」inc1.phpに 『サブディレクトリ/』として解釈されているようですので、インクルードパスにもかかわらず、唯一の 『サブディレクトリ』フォルダにinc1.phpを探します。

関連する問題