PHP требует файл из верхнего каталога - PullRequest
18 голосов
/ 03 октября 2011

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

/
/assets/
/forums/
/blog/

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

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

Можно ли как-то явно указать файл, начинающийся с корневого каталога?

Ответы [ 5 ]

47 голосов
/ 03 октября 2011

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

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

require_once __DIR__ . '/otherfile.php';

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

Используйте переменную $_SERVER['DOCUMENT_ROOT']

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

Корнем документа является папка, в которой находятся файлы корневого уровня: 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, но если у вас есть только определение класса, вы получите пустой результат.

0 голосов
/ 16 сентября 2017

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

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

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

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

Чтобы узнать больше, посетите: http://forums.htmlhelp.com/index.php?showtopic=2922

0 голосов
/ 11 ноября 2015

почему бы тебе не использовать (../)

require('../folder/file.php');
0 голосов
/ 23 октября 2014
  • предположим, что у вас есть pgm1.php в www.domain.com/dir1/dir2/dir3/pgm1.php, которые включают или требуют 'Дира / вкл / Xpto.php'.
  • и еще один файл pgm2.php на сайте www.domain.com/dirZ1/dirZ2/pgm2.php, которые включают или требуют того же 'dirA / inc / Xpto.php'.
  • и ваша конфигурация хоста не разрешает требовать / включать «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'); // путь от корня

0 голосов
/ 03 октября 2011

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

или

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

...