Нет такого файла или каталога (ошибка пути)

Ну, структура сайта проста:

  1. configпапка
    • config.php
    • cesar.php
  2. loginпапка
    • index.php
  3. index.php

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), основной индекс станет ОК и страница входа получит ошибку.
Как заставить оба кода работать?

1

Решение

.. в вашем пути используются для перехода в каталог, потому что файл не будет существовать там, где вы его ищете.

Если вы обновите его, чтобы быть include_once 'config/cesar.php'; это должно работать, поскольку это позволит ему перейти в каталог config, а не пытаться найти каталог с именем config 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';

1

Другие решения

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 = 'http://' . $_SERVER['SERVER_NAME'];

Затем замените ваши пути, как

../config/xxx.php

с

$base_url.'/config/xxx.php'
-1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector