Свой запуск (bootstrap) НЕ из корня - проблема с путями инклудов

Главные вкладки

Аватар пользователя SlyK@drupal.org SlyK@drupal.org 15 августа 2009 в 18:20

Решение оказалось простейшее, но я просто никогда на практике не встречался с этой командой ранее, поэтому пришлось долго разбираться в чем дело.

Задача:
Запустить Друпал на уровне базы данных ( drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE) ) для выполнения каких либо сервисных действий с базой скриптом из поддиректории.

Проблема:
Подключается первый основной файл: require_once '../includes/bootstrap.inc'; (.. - так как скрипт в поддиректории находится). В результате сам bootstrap.inc подключается, но не может найти следующие файлы:

Warning: include_once(./sites/default/settings.php) [function.include-once]: failed to open stream: No such file or directory in /home/user/public_html/includes/bootstrap.inc on line 274

Warning: include_once() [function.include]: Failed opening './sites/default/settings.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/user/public_html/includes/bootstrap.inc on line 274

Warning: require_once(./includes/cache.inc) [function.require-once]: failed to open stream: No such file or directory in /home/user/public_html/includes/bootstrap.inc on line 972

Fatal error: require_once() [function.require]: Failed opening required './includes/cache.inc' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/user/public_html/includes/bootstrap.inc on line 972

Решение:
Изменение текущей директории PHP функцией chdir, в моем случае:
<?php chdir(".."); ?>
Если необходимо можно дописать код, чтобы вернуться обратно в первую директорию, для этого еще потребуется ф-ция getcwd.

Комментарии