Ну, структура сайта проста:
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'