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');