php include_path для включений, начинающихся с ./ - PullRequest
1 голос
/ 13 апреля 2011

В моем 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 ]

5 голосов
/ 13 апреля 2011

путь начинается с. или / игнорировать 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 голос
/ 13 апреля 2011

Когда вы включите файл начальной загрузки другого фреймворка, вам нужно сначала chdir() в этот каталог, затем вы можете включить его, и все последующие включения будут выполняться правильно.относительно файла начальной загрузки.

0 голосов
/ 13 апреля 2011

Файлы включены в порядке путь включения, в этом примере Структура каталогов выглядит следующим образом:

.
100— index.php
100— t1
101 │— a
101 └─ b
└─ t2
| - b
101─ 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

?>

источник

0 голосов
/ 13 апреля 2011

Вы должны быть в состоянии сделать это с set_include_path( $path_to_include_files ). Если у вас все еще есть проблемы, это может означать, что в вашем скрипте есть другое место, которое устанавливает include_path в другое значение.

...