Включение файла из включенного файла. Проблема со ссылкой

#php

#php

Вопрос:

Вот пример структуры файла:

page.php
db.php
folder1/subpage.php
folder2/fn.php

page.php

 require_once('folder2/fn.php');
  

folder1/subpage.php

 require_once('../folder2/fn.php');
  

folder2/fn.php — требуется подключение к базе данных

 require_once('../db.php');
/* then gets info from database */
  

В принципе, fn.php содержит функции базы данных для получения / установки информации. Для этого требуется db.php , который является файлом подключения к базе данных. Этот код работает в subpage.php , но не в page.php (ошибка «не удалось открыть поток: нет такого файла или каталога в …»).

Есть ли способ (с использованием относительных ссылок), чтобы он работал во всех файлах независимо от уровня каталога?

Спасибо за вашу помощь!

Комментарии:

1. Какой файл вы включаете в page.php это очень важно.. вы должны поместить код page.php для лучшей понятности..

2. Рукми: представьте, что это весь код … других файлов, включенных в page.php

Ответ №1:

Я всегда использую абсолютный путь к включаемому. Есть несколько способов сделать это, эта команда вернет абсолютный путь

 <?php echo getcwd(); ?> 

But this is what I personally use: 
<? include $_SERVER['DOCUMENT_ROOT'] . "/includes/analytics.php"; ?> 
  

независимо от того, где находится файл, php будет иметь абсолютный путь.

Комментарии:

1. другим методом было бы использовать dirname(__ FILE __), чтобы получить абсолютный путь к текущему скрипту, который включает

2. как насчет добавления файлов за пределами общедоступного каталога? Вы не можете сделать www.example.com/../db.php — а ты знаешь?

3. Никакие пути не должны быть абсолютными /hompages/public_html/include/db.php или относительный include/db.php вы можете использовать URL-адрес, если вы включали файл с другого сервера за пределами вашего собственного, это делается с помощью cURL. Если вы хотите включить файл за пределами корневого веб-сайта вы должны использовать следующее homepages/dir_name/db.php вы можете либо жестко закодировать корень документа или сделать это динамически, используя этот кусок кода <? include $SERVER[‘DOCUMENT_ROOT’] . «/dir_name/db.php»; ?> Надеюсь, ответил на ваш вопрос.

4. Также рекомендуется использовать include или require на всех страницах. Некоторые люди скажут index.php в рамках они будут включать products.php а затем внутри products.php они будут включать в себя db.php Если вы используете оба варианта products.php и db.php включите их оба в index.php это может работать по-другому, но когда дело доходит до отладки, это значительно облегчает вашу жизнь. Удачи

5. Спасибо, Адам. Я попробую это, как только вернусь домой. Лично мне не нравится включать файлы во включенные файлы, но в этом случае php выдавал мне ошибку, поскольку я пытаюсь использовать mysql_query() внутри включенного файла (даже если он находится внутри функции и не вызывается из включенного файла). В любом случае, я включаю их в оба index.php и fn.php .