1

これは私が使用しているコードです(これはindex.phpファイルです)

/* Set an include path
*/
$dir = explode('/', __DIR__);
$i = count($dir);
unset($dir[$i-1], $dir[$i-2]);
$path = implode('/', $dir);
ini_set('include_path', $path);

// require('system/base/file.php'); // ***1

/* Starter file
*/
if (file_exists('system/base/file.php')) { require('system/base/file.php'); }
else { exit('Error'); }

この構造のフレームワークを開発しています

application/
    public/
        index.php
system/

そして、ルート/(application/とsystem/を含むフォルダー)へのインクルードパスを設定したいと思います。(ローカルホストで)__DIR__などの多くのものを私に与えています。Application/xammp/htdocs/application/public/index.phpそもそもパスについて何も知らないことを考えると、クライアント__DIR__がそれほど異なっているかどうかはわかりません。DIRから最後の2つのフォルダーを簡単に削除するために、最初の数行を書いたので、パスが何であれ正しいと確信しています__DIR__。これらの行を別のテスト設定でテストしましたが、正常に機能しています。

奇妙なことに、そこに表示されているコードを実行すると、「エラー」が発生します。system/base/file.php存在を確認する前に必要な場合は機能しますが。したがって、コメントを外すと(*** 1)、ファイルが必要になります。

4

1 に答える 1

2

$ path = dirname(dirname(DIR))を使用できます。これにより、最初の5行のコードと同じことが実現されます。

PHPのドキュメントによると、include_pathはrequire()、include()、fopen()、file()、readfile()、file_get_contents()でのみ機能し、file_exists()では機能しません。したがって、$pathを変数または定数に格納する必要があります。例えば:

/* Set an include path
*/
$path = dirname(dirname(__DIR__));
ini_set('include_path', $path);
define('PATH', $path)

// require('system/base/file.php'); // ***1

/* Starter file
*/
if (file_exists(PATH . 'system/base/file.php')) { require('system/base/file.php'); }
else { exit('Error'); }
于 2011-11-13T14:02:48.970 に答える