PHP require () ошибка относительного пути

У меня есть следующая структура файла:

rootDIR
    dir1
        subdir1
           file0.php
           file1.php
    dir2
       file2.php
       file3.php
       file4.php   

file1.php требует file3 и file4 от dir2 следующим образом:

require('../../dir2/file3.php')

file2.php требуетfile1.php как это :

require('../dir1/subdir1/file1.php')

НО тогда require в file1 не удается открыть file3 и file4 (возможно из-за относительного пути)

Однако в чем причина и что я могу сделать дляfile2.php такfile1.php правильно требовать file3 и file4

 S.Visser18 окт. 2012 г., 14:28
stackoverflow.com/questions/11383960/... Здесь вы найдете четкое объяснение.

Ответы на вопрос(4)

Я думаю, что ваш диск является dir2. Пытаться :

require("file3.php");
require("file4.php");

Правильный совет здесь, никогда не использовать такие вещи, как "../../» относительные пути в ваших веб-приложениях. Это'трудно читать и ужасно для обслуживания.

Как вы можете подтвердить. Это крайне затрудняет понимание того, на что вы указываете.

Если вам нужно изменить уровень папки вашего приложения или его частей. Это'Он полностью подвержен ошибкам и, скорее всего, сломает что-то ужасное для отладки.

Вместо,define несколько констант в вашем файле начальной загрузки для вашего основного пути и затем используйте:

require(MY_DIR.'/dir2/file3.php');

Переместить ваше приложение оттуда так же просто, как заменить константы MY_DIR в одном файле.

Для относительных путей вы можете использовать__DIR__ прямо, а неdirname(__FILE__) (пока выиспользуя PHP 5.3.0 и выше):

require(__DIR__.'/../../dir2/file3.php');

Не забудьте добавить дополнительную косую черту в начале пути в кавычках.

Увидеть:

PHP - с require_once / include / require путь относительно чего?PHP - Относительные пути "требуют»
Решение Вопроса

Попробуйте добавитьdirname(__FILE__) до пути, как:

require(dirname(__FILE__).'/../../dir2/file3.php');

Он должен включать файл, начиная с корневого каталога

 Dennis Haarbrink18 окт. 2012 г., 14:40
Если ты'на 5.3 или выше вам лучше использоватьDIRтак же, как dirname (ФАЙЛ) но спасаю тебядорого» вызов dirname ().
 Boris D. Teoharov18 окт. 2012 г., 14:44
спасибо .. можешь сказать мне разницу между/../dir» а также '../dir»
 Baronth18 окт. 2012 г., 14:53
в этом случае вы используете /../ потому что dirname (ФАЙЛ) вернуть строку вроде: '/ Корень / dir1 / dir2 / dir3' , пропуская последний '/'так что без слияния двух путей он стал бы/root/dir1/dir2/dir3../ '.

Ваш ответ на вопрос