Мне нужно включить файл из родительского каталога и других подкаталогов в подкаталог. Я сделал это раньше, просто используя 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», поэтому у нас есть папки:
В PHP1 вы помещаете файл index.php. и в папке 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:
вы просто ссылаетесь / кодируете
<?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'