Включить файлы из родительского или другого каталога

Мне нужно включить файл из родительского каталога и других подкаталогов в подкаталог. Я сделал это раньше, просто используя include ('/ rootdirectory / file.php'); но теперь это не сработает.

Просто интересно, как я могу это сделать, спасибо.

Вот моя точная строка:

include('/forums/groups.php'); 

Это дает мне эту ошибку (страница все еще работает):

Предупреждение: include (/forums/groups.php) [function.include]: не удалось открыть поток: нет такого файла или каталога в C: \ xampp \ htdocs \ forums \ blog \ posts.php on line

Предупреждение: include () [function.include]: Не удалось открыть '/forums/groups.php' для включения (include_path = '; C: \ xampp \ php \ PEAR') в C: \ xampp \ htdocs \ forums \ blog \ posts.php в строке 3

include() и его родственники берут пути файловой системы, а не веб-пути относительно корня документа. Чтобы получить родительский каталог, используйте ../

 include('../somefilein_parent.php'); include('../../somefile_2levels_up.php'); 

Если вы начинаете с / , будет использоваться абсолютный путь к системному файлу:

 // Full absolute path... include('/home/username/sites/project/include/config.php'); 

Вот что я написал с этой проблемой:

 <? function absolute_include($file) { /* $file is the file url relative to the root of your site. Yourdomain.com/folder/file.inc would be passed as "folder/file.inc" */ $folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); if($folder_depth == false) $folder_depth = 1; include(str_repeat("../", $folder_depth - 1) . $file); } ?> 

Надеюсь, поможет.

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

Пример:

/rootdir/pages/file.php

/someotherDir/index.php

Если вы написали следующее в index.php: include('/rootdir/pages/file.php'); это было бы ошибкой, потому что он попытался бы получить:

/someotherDir/rootdir/pages/file.php Какой, конечно, не существует …

Поэтому вам нужно будет использовать include('../rootdir/pages/file.php');

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

В терминах мирян и практичности я вижу это как старый трюк DOS / вещь. Вау! Что это было? DOS? Никогда не слышал об этом!

«..» возвращает вас из текущего подкаталога один раз в папку с более высокой папкой /, а затем вводить введенные дважды назад, вы также получаете более 2 родительских папок. Продолжайте добавлять « .. enter » назад, и вы скоро окажетесь на верхнем уровне каталога.

Что касается новичков, чтобы понять это лучше, подумайте об этом (с точки зрения домашнего ПК или «C: \ drive», если вы знаете, что это значит, а не «корневой каталог» веб-серверов / хостов). В то время как вы на нем, подумайте о своем веб-сайте, который находится где-то на жестком диске вашего домашнего ПК, похоронен в какой-то папке под диском C: \. Наконец, вы можете думать об этом как «..» назад один каталог и «/» пересылает один каталог / папку.

Теперь! Если вы используете командную строку и находитесь в папке « myDocuments » вашего ПК, вы должны вернуться из этой папки, чтобы приблизиться к более высокому каталогу «C: \», набрав « ../ ». Если вы хотите получить доступ к файлу, который находится в каталоге вдов, пока вы все еще находитесь в папке myDocuments, теоретически введите тип ./windows ; в действительности командной строки DOS вы просто набираете .. , но я настраиваю вас для Интернета. Переадресация / перенаправляется вперед в другой каталог.

Использование « myDocuments » позволяет сделать вид, что вы создали в нем 2 папки под названием «PHP1» и «PHP2», поэтому у нас есть папки:

  • C: \ myDocuments \ PHP1
  • C: \ myDocuments \ PHP2

В PHP1 вы помещаете файл index.php. и в папке PHP2 вы поместили файл под названием Found.php. теперь это становится:

  • C: \ myDocuments \ PHP1 \ index.php
  • C: \ myDocuments \ PHP2 \ found.php

Внутри файла C: \ myDocuments \ PHP1 \ index.php вам нужно будет отредактировать и ввести что-то вроде:

 <?php include ('../php2/found.php')?> 

The ../ является позиционным, поэтому он рассматривает ваше текущее местоположение файла «C: \ myDocuments \ PHP1 \ index.php» и является директивой, сообщающей ему вернуться из каталога PHP1 и ввести или перейти в каталог PHP2, чтобы найти найденный .php . Но читает ли это? См. Мои мысли по устранению проблем ниже.

Теперь! предположим, что у вас есть 1 папка PHP1 и подпапка PHP2:

  • C: \ myDocuments \ PHP1 \ PHP2

вы просто ссылаетесь / кодируете

 <?php include('/PHP2/found.php') ?> 

поскольку PHP2 существует как подкаталог, ниже или в каталоге PHP1.

Если вышеуказанное не работает, оно может иметь какое-то отношение к доступу / htaccess или разрешению к каталогу или опечатке. Чтобы улучшить это … попадание в проблему … Если файл «found.php» имеет ошибки / опечатки внутри него, он будет сбой при рендеринге при ошибке, это может быть причиной (require / require_once), что вы испытывая иллюзию, что он не меняет директории или не обращается к файлу. Наконец, подумав об этом, вам может потребоваться создать свои функции или ссылки, чтобы использовать включенное / требуемое «все», создав новую переменную или объект, например

 $newObject = new nameobject("origianlThingy"); 

Помните, что только потому, что вы включаете / требуете что-то, иногда это означает только то , что оно включено / требуется для запуска, но его, возможно, нужно воссоздать, чтобы сделать его активным или получить к нему доступ. Новый , несомненно, заново создаст экземпляр «если он доступен для чтения» и сделает его доступным в текущем документе при сохранении оригинала. Однако вы должны ссылаться на вновь созданную переменную $ newObject во всех экземплярах … если ее глобальная.

Сделать это в перспективе некоторой учетной записи веб-хостинга; веб-хост – это какой-то огромный жесткий диск (например, на вашем ПК), а ваш домен – не что иное, как папка, которую они вам назначили. Ваша папка называется корнем. Внутри этой папки вы можете делать все, что вам разрешено делать. ваш « один из многих способов » для перемещения между каталогами / папками состоит в том, чтобы использовать ../ но много раз, чтобы вернуться из вашего текущего в отношении позиции папки, которую вы хотите найти.

В моем пьяном состоянии я понимаю, что я слишком много знаю, чтобы быть здравомыслящим, и недостаточно, чтобы быть сумасшедшим! "

корневой каталог (в PHP) является каталогом файла, который пингируется. Например, я перехожу к http: //localhost/directory/to/file/index.php , корневой каталог будет «/ dictory / to / file», так как это тот, на который вы сделали веб-запрос.

Я черпал вдохновение из откровенного, и я добавил что-то подобное в моем файле settings.php, который затем включается во все страницы, когда есть ссылка:

"Settings.php"

  $folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); $slash=""; for ($i=1;$i<=($folder_depth-2);++$i){ $slash= $slash."../"; } 

в моем header.php, который будет включен во все страницы:

a href = …. php echo $ slash.'index.php '….

Кажется, он работает как на локальном, так и на локальном окружении ….

(ПРИМЕЧАНИЕ: я абсолютный новичок)

Раньше такая же проблема решалась так:

включают в себя ( '/../ включает / config.php'); // отмечаем '/', появляющийся перед '../includes/config.php'