Intereting Posts

включить php-файл с включенными файлами

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

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

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

/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.