PHP требует, чтобы файл из верхнего каталога
У меня есть несколько поддоменов, содержащихся в их собственном каталоге выше моего корневого сайта и папка с ресурсами в моем корневом каталоге. Например:
/
/assets/
/forums/
/blog/
Я пытаюсь потребовать() файлы на php-страницах как в корневом каталоге, так и в подкаталогах, например, assets/include/form.php требуется() как в index.php в корневом каталоге, так и в индексе .php в каталоге форумов. Однако внутри form.php требуется другое, пытаясь получить еще один файл, содержащийся в каталоге include.
Я не могу найти способ потребовать файл внутри этого form.php, где он будет работать как в корневом каталоге index.php, так и в справочном каталоге index.php.
Можно ли явно указать файл, начинающийся с корневого каталога?
Ответы
Ответ 1
Существует несколько способов достижения этой цели.
Использовать относительный путь от 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, но если у вас есть только определение класса, вы получите пустой результат.
Ответ 2
У вас есть 2 решения. Вы можете либо использовать полный URL-адрес файла, например, если ваш файл находится в каталоге "lib", который вы можете использовать:
require_once ('http://www.mysite.com/lib/myfile.php')
или
Вы можете попробовать функцию $_SERVER ['DOCUMENT_ROOT'] в PHP, но это не всегда доказательство дурака.
Ответ 3
- Предположим, у вас есть 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".
- и ваша конфигурация хоста не разрешает 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');//путь от root
Ответ 4
Если один уровень выше, используйте:
include('../header.php');
если два уровня выше:
include('../../header.php');
Подробнее, посетите: http://forums.htmlhelp.com/index.php?showtopic=2922
Ответ 5
почему бы вам не использовать (../)
require('../folder/file.php');