1

私のPHPフレームワークでは、別のPHPフレームワークのいくつかの関数を使用したいと思います。その他のフレームワークには、ポータルスクリプト(index.php)が1つだけあります。そこからすべてを実行します(ブートストラップ、呼び出しコントローラー、アクションなど)。他のフレームワークには、。/で始まるすべてのファイルが含まれます

他のフレームワークのindex.php:

include './inc/bootstrap.php';

bootstrap.phpの場合:

include './inc/configs.php';
include './inc/database.php';

などなど

したがって、すべてのインクルードはindex.phpが含まれているフォルダーに関連しているように見えます。

別のフォルダー(フレームワーク内のどこか、ポータルスクリプトではなく、完全に異なるフォルダー)からフレームワークをブートストラップできるように環境をセットアップする方法はありますか?

include_pathincludeを使用して、.include_path内の他のフレームワークのフォルダーでも試してみましたが、何も変わりませんでした。

./インクルードだと思いますが、変更することはできません(他のフレームワークは私のフレームワークの一部ではなく、いつか更新される予定です)。それらを回避する方法はありますか(または私はそれを明らかに間違っていますか)?

4

4 に答える 4

5

で始まるパス。または/include_pathは作業ディレクトリに相対的であるため、無視します。

したがって、唯一の方法は、PHP関数chdirを使用して作業ディレクトリを変更することです。

フレームワーク内:

chdir('/path/of/the/other/framework'); // change the working directory
require '/path/of/the/other/framework/bootstrap.php'; 

// optionally you can reset the working directory
chdir(dirname(__file__));
于 2011-04-13T19:42:59.680 に答える
1

他のフレームワークのブートストラップファイルをchdir()含める場合は、最初にそのディレクトリに移動する必要があります。次に、それを含めることができます。その後のすべてのインクルードは、ブートストラップファイルに対して適切に行われます。

于 2011-04-13T19:43:58.217 に答える
0

でこれを行うことができるはずですset_include_path( $path_to_include_files )。それでも問題が解決しない場合は、スクリプト内include_pathに別の値を設定している別の場所があることを意味している可能性があります。

于 2011-04-13T19:33:51.777 に答える
0

ファイルはインクルードパスの順にインクルードされます。この例では、ディレクトリ構造は次のとおりです。


│— index.php
│— t1│
nbsp; │—
  └─b└─t2       | —b└─c
_ _ _      _ _


<?php

set_include_path('t1' . PATH_SEPARATOR . 't2');

include 'a';  // includes from T1
include 'b';  // includes from T1
include 'c';  // includes from T2

?>

インクルードパスは、インクルード/リクワイア機能にのみ影響することに注意してください。

<?php

var_dump(file_exists('a'));  // false
var_dump(fopen('b', 'r'));  // file not found

?>

ソース

于 2011-04-13T19:56:53.840 に答える