| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Подскажите по require_once |
| Автор: V0fka 27.7.2013, 21:37 | ||||||||
| Привет! Имеем такую структура . .. dir1 .... file1.php .... file2.php .. dir3 .... file3.php В файле file1.php подключается file2:
в котором подключаем file3
Но если структура поменяется так . .. dir1 .... dir11 ........ file1.php .... file2.php .. dir3 .... file3.php И в file1 изменить путь подключения на
то получаю ошибку, что file3 не найден, т.к. вот это подключение
хоть и выполняется в file2.php, но путь ищется относительно file1.php. Можно как-то сделать, чтобы require_once отрабатывало относительно того файла, в котором вызывается? |
| Автор: ksnk 27.7.2013, 22:23 | ||
| V0fka, каким образом вызывается файл? С консоли или сервером? Если вызывается модулем апача, то всегда инклюдится относительно файла, если консолью - всегда относительно "главного" скрипта. Для единообразия можно делать chdir перед включением.
Существуют более другие средства автоматизации поиска файлов. установить include_path с нужными каталогами iniset('include_path',...); и включать файлы без указания каталога. не использовать инклюд в явном виде вообще, а настроить автолод (spl_autoload), чтобы он сам искал классы в нужных местах. |
| Автор: V0fka 28.7.2013, 13:59 |
| ksnk, дело в том, что я не совсем в курсе что подразумевается под "консолью" или "сервером". Скрипт должен вызываться по CRON-у, но для отладки и проверки я запускаю его из браузера. Так вот при запуске из браузера, я как раз и обнаружил эту досадную штуку, т.к. перенес скрипты в каталог на уровень ниже, поменял путь к некоторым подключаемым файлам (вместо ../../ сделал ../../../) и скрипты перестали работать, ругаясь о невозможности подкчлючения файлов в в тех скриптах, которые не трогались и не перемещались. Менять что-то в не моих скриптах я не хочу, т.к. они используются в других, мне не известных, местах и я боюсь, что потом долго и нудно придется отлавливать новые неизвестные ошибки. Поэтому я подумал, что может быть есть возможность в вызывающем (главном/запускаемом) скрипте как-то явно указать, чтобы require_once во всех скриптах, в т.ч. и подключаемых, выполнялось относительно того файла, откуда эта функция вызывается. |
| Автор: ksnk 28.7.2013, 16:59 |
| консоль - запуск через php. Крон именно так и запускает скрипт. Сервер запускает через модуль апача. У них разная логика в обработке. Я уже предложил 3 возможных способа решить проблему. |
| Автор: ksnk 28.7.2013, 17:37 | ||
еще один вариант - использовать в кроне команду fetch
тогда починять придется только один вариант запуска. |
| Автор: V0fka 29.7.2013, 09:37 |
| ksnk, спасибо за ответы! Буду пробовать применть что-то из вами предложенного. |