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

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

site.com

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

Solutions Collecting From Web of "Нет такого файла или каталога (ошибка пути)"

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

Если вы обновите его, 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'