Как включить скрипт PHP из базового пути, отличного от текущего скрипта? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть приложение PHP, которое я пытаюсь включить, но оно вызывает проблемы, потому что я пытаюсь включить его файлы из подкаталога.Например, вот структура каталогов (более или менее), с которой я пытаюсь работать:

/site
    /scripts
        /local
            some_script.php
    lib_file_a.php
    lib_file_b.php
    lib_load.php

lib_load.php имеет команду include для файлов lib_file_a.php и lib_file_b.php (относительный путь)).

Я хочу добавить lib_load.php из some_script.php, но есть проблема с тем, как я включаю lib_load.php.Сначала я попытался require('../../../lib_load.php');.

. Как и следовало ожидать, я увидел ошибку: «Не удалось открыть файл« C: \ xampp \ htdocs \ site \ scripts \ local \ lib_file_a.php »».Как видите, PHP пытается включить файл, который не существует.Я нашел сообщение о переполнении стека, в котором говорилось об использовании абсолютного пути (ссылка) , но это не помогло.Затем я попробовал этот код:

require(realpath(dirname(__FILE__) . '../../../' . 'lib_load.php'));

Однако в этот раз возвращается та же ошибка.Что я делаю не так?

РЕДАКТИРОВАТЬ: я понял, что проблема на самом деле была в загрузчике библиотеки, который, как оказалось, включал файлы, основанные на абсолютном пути, а не относительном пути.(Я должен был прочитать более внимательно.) Я решил проблему, изменив путь, используемый библиотекой.Этот вопрос должен быть закрыт, если мод видит этот запрос.

Ответы [ 2 ]

8 голосов
/ 06 марта 2012

Чтобы включить загрузку lib

require $_SERVER['DOCUMENT_ROOT'] . '/scripts/lib_load.php';

внутри lib load

require dirname(__FILE__) . '/lib_file_a.php';

если я правильно понял вашу проблему

2 голосов
/ 06 марта 2012

Попробуйте:

require dirname(__FILE__) . '/../../../lib_load.php');

Или, если вы используете PHP 5.3 или выше, используйте вместо этого (выглядит лучше):

require __DIR__ . '/../../../lib_load.php');
...