Ну, структура сайта проста:
config '
login '
config.php:
include_once '../config/cesar.php';
На сайте site.com/index.php :
Warning: include_once(../config/cesar.php): failed to open stream: No such file or directory
На сайте site.com/login/index.php все в порядке.
Если я удалю одну точку (./config/cesar.php), основной индекс станет OK, а страница входа в систему получит ошибку. Как заставить оба кода работать?
На вашем пути … используется для перехода в каталог, потому что файл не будет существовать там, где вы его ищете.
Если вы обновите его, include_once 'config/cesar.php'; он должен работать, так как это позволит ему перейти в каталог конфигурации, а не попытаться найти каталог с именем уровня конфигурации 1 выше, где находится index.php.
./ работает с тех пор . – это обозначение для текущего каталога.
Чтобы ответить на ваш вопрос, было бы невозможно, если бы код работал с использованием относительного пути, поскольку оба файла находятся в разных местах на сервере по отношению к тому, который вы хотите включить. Если вы хотите что-то сделать, вам нужно будет использовать абсолютный путь, а не относительный путь. Это было бы похоже на /path/to/webdirectory/site.com/path/to/file/config.php (т.е. /home/charles/websites/site.com/config/config.php ) в * nix и C:\path\to\webdirectory\site.com\path\to\file\config.php на окнах.
В PHP вы должны иметь возможность получить абсолютный путь динамическим способом, используя переменную $_SERVER['DOCUMENT_ROOT'] . Пример: include_once $_SERVER['DOCUMENT_ROOT'] . '/config/cesar.php'; include_once $_SERVER['DOCUMENT_ROOT'] . '/config/cesar.php';
Warning: include_once(../config/cesar.php): failed to open stream: No such file or directory
Однажды я столкнулся с подобной проблемой. Вы должны помнить, что (./config/xxx.php) и (config/xxx.php) означают то же самое, но (../config/xxx.php) перейдут в каталог и найдут папку config и xxx. php в нем.
Вы также можете использовать $base_url в качестве строки $base_url для всех ваших путей, чтобы сделать ее чистой. Где:
$base_url = 'http://' . $_SERVER['SERVER_NAME'];
Затем замените ваши пути, как
../config/xxx.php
с
$base_url.'/config/xxx.php'