Включить путь и странную структуру
-
16-09-2020 - |
Вопрос
Хай.У меня есть сайт, который действительно странный и теперь доставляет мне неприятности.Это упрощенная структура
public_html
- adm
--- raport
------ raportpdf.php
--- class
------ Bonus
--------- Bonus_DAO.class.php
------ config.php
--- raport.php
- index.php
Так.Index.php — гигантский загрузчик.В нем есть строки:(но я не думаю, что они что-то меняют)
set_include_path('lib/DB' . PATH_SEPARATOR . get_include_path());
set_include_path('lib/PHPLOT' . PATH_SEPARATOR . get_include_path());
set_include_path('config' . PATH_SEPARATOR . get_include_path());
set_include_path('view' . PATH_SEPARATOR . get_include_path());
set_include_path('controller' . PATH_SEPARATOR . get_include_path());
set_include_path('model' . PATH_SEPARATOR . get_include_path());
Внутри Bonus_DAO.class.php что-то вроде
require_once('./adm/class/config.php');
Raportpdf.php вызывается через index.php - он без ошибок отправляет свое содержимое на почту.Но когда я хочу получить доступ к rapport.php, у меня возникает ошибка типа:
Warning: require_once(./adm/class/config.php) [function.require-once]: failed to open stream: No such file or directory in /home/panele/domains/blahblah/public_html/adm/class/Bonus/Bonus_DAO.class.php on line 2
Fatal error: require_once() [function.require]: Failed opening required './adm/class/config.php' (include_path='.:/usr/local/lib/php') in /home/panele/domains/blahblah/public_html/adm/class/Bonus/Bonus_DAO.class.php on line 2
Как я могу это решить?
Решение
Вставьте строку, подобную следующей, в файл, который включен в вашу структуру (этот включенный файл ДОЛЖЕН находиться в корневом каталоге, что-то вроде config.php или я обычно использую init.php).
define("ROOT_DIR",dirname(__FILE__));
Затем, когда вы получаете ошибки (или, если уж на то пошло, для синонимии в вашем коде - везде, где вам требуется()/include()), добавьте перед ним ROOT_DIR."/path/to/file".При этом указывается абсолютный путь к корневому каталогу, а затем вы просто указываете каталог в корне, который ищете.Для примера, мой корневой каталог - «/home2/example». Теперь я вставляю эту строку в файл, который я включил, и т. Д.и измените строку require на это:
require_once(ROOT_DIR."/adm/class/config.php");
Строка выше в основном переводится следующим образом (при условии, что я использовал define();оператор в файле, расположенном в /home2/example)
require_once("/home2/example/adm/class/config.php");
По сути, это простой способ придать статическим путям динамический элемент, чтобы вы больше не столкнулись с этой проблемой!
Удачи!
Деннис М.