PHP include-пути - включить не удается, если файл указан с префиксом "./" - PullRequest
1 голос
/ 21 августа 2009

У меня проблемы с include, когда включаемый файл сам включает другой файл, но ссылается на него с префиксом точки. Например, есть три файла - inc1.php , inc2.php и subdir / test.php , содержимое которых -

подкаталог / test.php:

set_include_path(get_include_path().":../:../.");
require("inc1.php");

inc1.php:

require("./inc2.php");

inc2.php

echo "OK";

Это дерево включения, показанное здесь, завершается с ошибкой Не удалось открыть поток: нет такого файла или каталога Ошибка. Это работает, если inc1.php содержит простой require ("inc2.php"); , без префикса "./". Я добавил "../." к пути включения как попытке заставить его работать, но это не имело никакого эффекта.

Помимо выполнения включения с префиксом "./", какое здесь решение, если предположить, что inc1.php и inc2.php недоступны для записи, и вы можете изменить только subdir / test.php? Как вы по-прежнему можете включить inc1.php из test.php?

Для справки, я использую PHP 5.2.9.

Ответы [ 2 ]

6 голосов
/ 21 августа 2009

Всегда включайте использование следующего стиля, если у вас нет ( очень ) веских причин не делать этого:

include(dirname(__FILE__)."/inc2.php");

Это избавляет от всех видов головной боли.

0 голосов
/ 28 августа 2009

Простой chdir(), кажется, работает для этого; изменив test.php на:

chdir("../");
require("inc1.php");

Кажется, что "./" в inc1.php интерпретируется как 'subdir /', поэтому он ищет inc1.php только в папке 'subdir', несмотря на путь включения.

...