PHP требует файл из верхнего каталога

У меня есть несколько поддоменов, содержащихся в их собственном каталоге над моим корневым сайтом, и папка ресурсов в моем корневом каталоге. Например:

/
/assets/
/forums/
/blog/

Я пытаюсь требовать () файлы на страницах php как в корневом каталоге, так и в подкаталогах, например, assets/include/form.php требуется () как в index.php в корневом каталоге, так и в index.php в каталог форумов. Однако внутри form.php есть еще одно требование: попытаться получить другой файл, содержащийся в каталоге include.

Я не могу найти способ требовать файл внутри этого form.php, где он будет работать как на index.php корневого каталога, так и на index.php каталога форума.

Есть ли способ, которым я могу явно требовать файл, начиная с корневого каталога?

5 ответов

Решение

Есть несколько способов добиться этого.

Использовать относительный путь от form.php

require_once __DIR__ . '/otherfile.php';

Если вы используете PHP 5.2 или старше, вы можете использовать dirname(__FILE__) вместо __DIR__, Подробнее о магических константах читайте здесь.

Использовать $_SERVER['DOCUMENT_ROOT'] переменная

Это абсолютный путь к корню вашего документа: /var/www/example.org/ или же C:\wamp\www\ на винде.

Корнем документа является папка, в которой находятся файлы корневого уровня: http://example.org/index.php $_SERVER['DOCUMENT_ROOT'] . '/index.php'

Использование: require_once $_SERVER['DOCUMENT_ROOT'] . '/include/otherfile.php';

Используйте автозагрузчик

Вероятно, это будет немного излишним для вашего приложения, если оно очень простое.

Настройте пути включения PHP

Вы также можете установить каталоги, в которых PHP будет искать файлы при использовании require() или же include(), Проверять, выписываться set_include_path() здесь

Использование: require_once 'otherfile.php';


Замечания:

Я вижу, что некоторые ответы предлагают использовать URL внутри require(), Я бы не стал предлагать это, так как PHP-файл будет проанализирован до его включения. Это нормально для HTML-файлов или PHP-скриптов, которые выводят HTML, но если у вас есть только определение класса, вы получите пустой результат.

Если на один уровень выше использовать:

include('../header.php');

если на два уровня выше:

include('../../header.php');

Более того, посетите: http://forums.htmlhelp.com/index.php?showtopic=2922

У вас есть 2 решения. Вы можете использовать либо полный URL-адрес файла, например, если ваш файл находится в каталоге 'lib', который вы можете использовать: require_once (' http://www.example.com/lib/myfile.php')

или же

Вы можете попробовать $_SERVER['DOCUMENT_ROOT'] функция в PHP, но это не всегда дурак.

Возможно, это неправильная тема и, возможно, неправильное использование, но, может быть, это кому-то поможет. Когда я хотел сделать ссылки в меню по абсолютному пути, когда я прыгал из каталога в каталог, а пути постоянно менялись, я хотел исправить базовый каталог.

Поэтому вместо использования '../' для перехода в подпапку (так как я не знал многих, что мне нужно было спуститься../../../), я написал ссылку как <a href='/first_dir/second_dir/third_dir//..'>, похоже, он также работает с <img src='/first_dir/second_dir//../logo.svg'>. К сожалению, это не работает сrequire_once(). PHP 7

  • Предположим, у вас есть файл pgm1.php на сайте www.domain.com/dir1/dir2/dir3/pgm1.php, в который входит или требуется файл dirA/inc/Xpto.php.
  • и еще один pgm2.php в www.domain.com/dirZ1/dirZ2/pgm2.php, который включает или требует того же самого dirA/inc/Xpto.php.
  • и ваша конфигурация хоста не авторизует require / include ' http://www.domain.com/......'
  • Итак... вы можете использовать это как в pgm1.php & pgm1.php, так и в REQUIRE или
    ВКЛЮЧИТЬ работает!

    function rURI($p){
       for($w='',$i=1;$i<(count(explode('/',$_SERVER['PHP_SELF']))-1);$i++,$w.='../');return
       $w.$p; }
    

    требуют rURI('dirA/inc/Xpto.php'); // путь от корня

Почему ты не используешь (../)

require('../folder/file.php');
Другие вопросы по тегам