php包含以./开头的包含路径

时间:2011-04-13 19:27:21

标签: php include include-path

在我的PHP框架中,我想使用另一个PHP框架的几个函数。其他框架只有一个门户脚本(index.php)。它从那里做所有事情(引导程序,呼叫控制器和动作等)。另一个框架包括以./

开头的所有文件

另一个框架的index.php:

include './inc/bootstrap.php';

在bootstrap.php中:

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

等等

所以看起来所有包含都与文件夹index.php相关。

有没有办法设置环境,所以我可以从另一个文件夹(我的框架中的某个地方,所以一个完全不同的文件夹,而不是门户网站脚本)引导框架?

include_path包含.,我已经尝试使用include_path中的其他框架文件夹,但这并没有改变任何内容。

我猜它是./ includes,但是我不能改变它们(其他框架不是我的框架的一部分,并且会在一段时间内更新)。有没有办法绕过他们(或者我做错了)?

4 个答案:

答案 0 :(得分: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__));

答案 1 :(得分:1)

当你去包含另一个框架的bootstrap文件时,你需要首先chdir()进入该目录,然后你可以包含它,并且它将做的所有后续包含将相对于引导程序正确文件。

答案 2 :(得分:0)

您应该可以使用set_include_path( $path_to_include_files )执行此操作。如果您仍然遇到问题,则可能意味着您的脚本中还有另一个地方正在将include_path设置为其他值。

答案 3 :(得分:0)

  

文件按顺序包含在内   包含路径,在这个例子中,   目录结构如下:


│- index.php
│- t1
││- a
│└─ 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

?>

source