1

在我的 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 中使用其他框架的文件夹,但这并没有改变任何东西。

我猜它是 ./ 包含的,但我无法更改这些(其他框架不是我框架的一部分,将在一段时间内更新)。有没有办法绕过它们(或者我做错了)?

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
│  │——一个
│  └─ 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 回答