включить файл php с включенными файлами - PullRequest
2 голосов
/ 10 апреля 2011

Вот структура каталогов

  • / global.php
  • / includes / class_bootstrap.php
  • / includes / init.php
  • /plugins/myplugin.php

Вот коды в этих файлах

/ start.php

require('./includes/class_bootstrap.php');

/включает в себя / class_bootstrap.php

define('CWD', (($getcwd = getcwd()) ? $getcwd : '.'));
require_once(CWD . '/includes/init.php');

/ plugins / myplugin.php

require_once(dirname(__FILE__).'../global.php');

И, насколько я понимаю, проблема в class_bootstrap.php файл, потому что он генерирует неправильный путь для CWD, вот ошибка:

Предупреждение: require_once (C: /wamp/www/vb4/plugins/includes/init.php) [function.require-Once]: не удалось открыть поток: нет такого файла или каталога в C: /wamp/www/vb4/global.php в строке 35

Как вы можете видеть "C: / wamp / www / vb4/plugins/includes/init.php "неверный путь.

ОСНОВНАЯ ПРОБЛЕМА заключается в том, что я могу редактировать только файл myplugin.php, остальные файлы являются основными файлами CMS и не должны изменяться.

Как я могу исправить эту проблему?

1 Ответ

6 голосов
/ 10 апреля 2011

Если вам необходимо определить базовый путь для набора сценариев, вы не должны полагаться на «текущий рабочий каталог». Это может измениться от исполняющей среды к исполняющей среде.

Вместо этого основывайте его на известном пути.

/includes/class_bootstrap.php знает , что это будет один каталог по сравнению с базовым путем, поэтому он может сделать это:

define('CWD', realpath(dirname(__FILE__) . '/../') );

dirname возвращает имя каталога, указанное в переданной строке. Если __FILE__ вернет C:/wamp/www/vb4/plugins/includes/class_bootstrap.php, то dirname вернет C:/wamp/www/vb4/plugins/includes. Затем мы добавляем /../ к нему и затем вызываем realpath, что превращает этот относительный .. в реальный каталог: C:/wamp/www/vb4/plugins

Уф.

С этого момента, CWD будет работать так, как вы ожидаете. Вы можете require_once CWD . '/includes/init.php', и он будет правильно разрешать до C:/wamp/www/vb4/plugins/includes/init.php

Кроме того, это может звучать глупо, но «vb4» может относиться к vBulletin 4, и в этом случае ваш плагин может уже имеет доступ к информации о конфигурации, которую он предоставляет, включая такие полезные вещи, как пути. Это может сделать все это упражнение ненужным. Я намеренно ничего не знаю о vB, иначе я бы указал вам на их документы для разработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...