Подтвердить что ты не робот

Включить файлы из родительского или другого каталога

Мне нужно включить файл из родительского каталога и других подкаталогов в подкаталог. Я сделал это раньше, просто используя include ('/rootdirectory/file.php'); но теперь это не сработает.

Просто интересно, как я могу это сделать, спасибо.

Здесь моя точная строка:

include('/forums/groups.php');

Это дает мне эту ошибку (страница все еще работает):

Предупреждение: include (/forums/groups.php) [function.include]: не удалось open stream: нет такого файла или каталога в 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

4b9b3361

Ответ 1

include() и его родственники берут пути файловой системы, а не веб-пути относительно корня документа. Чтобы получить родительский каталог, используйте ../

include('../somefilein_parent.php');
include('../../somefile_2levels_up.php');

Если вы начинаете с /, используется абсолютный путь к системному файлу:

// Full absolute path...
include('/home/username/sites/project/include/config.php');

Ответ 2

Если ваш сервер не разрешает файл из родительского каталога с помощью

include '../somefilein_parent.php'

попробуйте это:

include __DIR__ . "/../somefilein_parent.php";

Ответ 3

Вот что я написал с этой проблемой:

<?
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);
         }
?>

надеюсь, что это поможет.

Ответ 4

В зависимости от того, где находится файл, который вы пытаетесь включить из.

Пример:

/rootdir/pages/file.php

/someotherDir/index.php

Если вы указали в index.php следующее: include('/rootdir/pages/file.php'); было бы ошибкой, потому что он попытался бы получить:

/someotherDir/rootdir/pages/file.php Что, конечно, не существует...

Итак, вам нужно будет использовать include('../rootdir/pages/file.php');

Ответ 5

В условиях laymans и практичности я вижу это как старый трюк DOS/вещь. Вау! Что это было? DOS? Никогда не слышал об этом!

".." возвращает вас из текущего подкаталога один раз в папку с более высокой папкой /, а .. enter напечатал дважды два раза назад более высокие родительские папки. Продолжайте добавлять ".. enter" назад, и вскоре вы окажетесь на верхнем уровне каталога.

Как для новичков, чтобы понять это лучше, рассмотрите это (с точки зрения домашнего ПК или "C:\drive", если вы знаете, что это значит, а не "корневой каталог" веб-серверов/хостов). В то время как вы на нем, подумайте о своем веб-сайте, который находится где-то на вашем домашнем жестком диске ПК, зарытой в какую-то папку под диском C: \. Наконец, вы можете думать об этом как ".." назад один каталог и "/" пересылает один каталог/папку.

Теперь! Если вы используете командную строку и находитесь в папке " myDocuments" вашего компьютера, вы должны вернуться из этой папки, чтобы приблизиться к более высокому каталогу "C: \", введя "../". Если вы хотите получить доступ к файлу, который находится в каталоге вдов, пока вы все еще находитесь в папке myDocuments, теоретически введите ../windows; в действительности командной строки DOS вы просто набираете .., но я настраиваю вас для Интернета. / перенаправляет перенаправление в другой каталог, естественно.

Используя " myDocuments", предположим, что вы создали две папки внутри него, называемые "PHP1" и "PHP2", у нас теперь есть папки:

  • C:\MyDocuments\ PHP1
  • C:\MyDocuments\ PHP2

В PHP1 вы помещаете файл с именем index.php. и в папке PHP2 вы поместили файл под названием Found.php. теперь он становится:

  • C:\myDocuments\PHP1\ index.php
  • C:\MyDocuments\PHP2\ found.php

Внутри Файл C:\myDocuments\PHP1\index.php, который вам нужно будет отредактировать и введите что-то вроде:

<?php include ('../php2/found.php')?>

../ является позиционным, поэтому он рассматривает ваше текущее местоположение файла "C:\myDocuments\PHP1\index.php" и является директивой, сообщающей ему вернуться из PHP1 и введите или перейдите в каталог PHP2, чтобы найти файл Found.php. Но читает ли это? См. Мои мысли по устранению проблем ниже.

Теперь! предположим, что у вас есть 1 папка PHP1 и подпапка PHP2:

  • C:\MyDocuments\ PHP1\PHP2

вы просто ссылались бы /code

<?php include('/PHP2/found.php') ?>

поскольку PHP2 существует как подкаталог, ниже или внутри каталога PHP1.

Если вышеуказанное не работает, оно может иметь какое-то отношение к доступу /htaccess или разрешению к каталогу или опечатке. Чтобы улучшить это... попадание в проблему... Если в файле "found.php" есть ошибки/опечатки внутри него, он будет сбой при рендеринге при ошибке, такова может быть причина (require/require_once), что вы испытывая иллюзию, что он не меняет директории или не обращается к файлу. Наконец, подумав об этом, вам может потребоваться создать свои функции или ссылки, чтобы использовать включенное/требуемое "все", создав новую переменную или объект, например

$newObject = new nameobject("origianlThingy");

Помните, что только потому, что вы включаете/требуете что-то, иногда это означает, что оно включено/требуется для запуска, но его, возможно, нужно будет воссоздать, чтобы активировать его или получить к нему доступ. Новый, несомненно, заново создаст экземпляр "если он доступен для чтения" и сделает его доступным в текущем документе при сохранении оригинала. Однако вы должны ссылаться на вновь созданную переменную $newObject во всех случаях.... если ее глобальная.

Сделать это в перспективе некоторой учетной записи веб-хоста; веб-хост - это какой-то огромный жесткий диск (например, на вашем ПК), а ваш домен - не что иное, как папка, которую они вам назначили. Ваша папка называется корнем. Внутри этой папки вы можете делать все, что вам разрешено делать. ваш "один из многих способов" для перемещения между каталогами/папками состоит в том, чтобы использовать ../ столько раз, чтобы вернуться из текущего в ссылке в папку, которую вы хотите найти.

В моем пьяном состоянии я понимаю, что я слишком много знаю, чтобы быть здравомыслящим, а не достаточно, чтобы быть сумасшедшим! "

Ответ 6

Любой путь, начинающийся с косой черты, будет абсолютным путем. В корневой папке сервера, а не в корневой папке вашего корня документа. Вы можете использовать ../ для перехода в родительский каталог.

Ответ 7

Я черпал вдохновение из откровенного, и я добавил что-то подобное в моем файле 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 '....

Кажется, он работает как на локальном, так и на локальном окружении....

(ПРИМЕЧАНИЕ: я абсолютный новичок)

Ответ 8

корневой каталог (в PHP) - это каталог файла, который пингорован. Например, я перехожу к http://localhost/directory/to/file/index.php, корневой каталог будет "/dictory/to/file", так как он тот, который вы 've сделал веб-запрос для.

Ответ 9

Если бы такая же проблема была решена ранее:

включают в себя ( '/../включает/config.php');//отмечаем '/', появляющийся перед '../includes/config.php'

Ответ 10

Вас может заинтересовать использование встроенной функции php realpath(). и передавая константу DIR

например: $ TargetDirectory = realpath (__DIR __. "/../..");//вернет вам 2 папки назад

Строка realpath() :: Возвращает канонизированный абсолютный путь.