Вот структура каталогов
/start.php
require('./includes/class_bootstrap.php');
/includes/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 coz вызывает неправильный путь для 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 и не должны меняться.
Как я могу исправить эту проблему?
Если вам нужно определить базовый путь для набора сценариев, вы не должны полагаться на «текущий рабочий каталог». Это может измениться из среды выполнения в среду выполнения.
Вместо этого оставьте его на известном пути.
/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'
require_once CWD . '/includes/init.php'
и он правильно разрешит C:/wamp/www/vb4/plugins/includes/init.php
Кроме того, это может показаться глупым, но «vb4» может относиться к vBulletin 4, и в этом случае ваш плагин может уже иметь доступ к информации о конфигурации, которую он предоставляет, включая удобные вещи, такие как пути. Это может сделать ненужным все это упражнение. Я намеренно ничего не знаю о vB, иначе я бы указал вам на их dev docs.