Использование $_SERVER['DOCUMENT_ROOT'] означает, что я не могу получить доступ к переменным во включенном файле

Я вызываю файл конфигурации базы данных (db_config.php) в моем файле header.php. Я вызываю header.php в своем шаблоне (location.php). Мне нужно получить доступ к переменным в файле конфигурации базы данных, поскольку я запускаю запросы, которые возвращают результат, который я затем вызываю в шаблоне.

Итак, в моем файле db_config.php у меня есть следующее:

$area_query = "SELECT * FROM `locations` where `type` = 'area'";

mysqli_query($db, $area_query) or die('Error querying database.');

$area_result = mysqli_query($db, $area_query);

if (!$area_result) {
  printf("Error: %s\n", mysqli_error($con));
  exit();
}

Затем в файле с именемlocations.php я просматриваю результат вышеприведенного, используя:

            while ($row = mysqli_fetch_array($area_result))
        {
            echo "<li class='location-list-item'><a href='location/$row[name]'><span class='initial-letter'>".mb_substr($row['name'],0,1)."</span>".$row['name']." <i class=\"fa fa-chevron-circle-right\" aria-hidden=\"true\"></i></a></li>";
        }

Это отлично работает, если я включаю db_config.php в header.php, используя следующее:

include("config/db_config.php");

Однако, если я использую:

include($_SERVER['DOCUMENT_ROOT']."/config/db_config.php");

Он находит db_config.php, как и ожидалось (как эхо чего-то в выводах db_config.php при посещении файла location.php), но я не могу получить доступ к $area_result. Я получаю следующую ошибку:

Notice
: Undefined variable: area_result
on line
28


Warning
: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null 
given in
locations.php
on line
28

Я не понимаю, почему использование $_SERVER['DOCUMENT_ROOT'] не позволяет мне получить доступ к переменной? Мне нужно использовать $_SERVER['DOCUMENT_ROOT'] по причинам пути к файлу.

Чтобы уточнить, в location.php я включаю header.php, который, в свою очередь, включает db_config.php. Я могу отобразить информацию в db_config, которая выводится при посещении location.php, но я не могу получить доступ к переменным.

Спасибо.


person user3725781    schedule 23.07.2017    source источник
comment
Обратитесь к stackoverflow.com/questions/11893832/   -  person Amir    schedule 23.07.2017
comment
Спасибо, попробовал несколько вещей там, но ничего из этого не сработало.   -  person user3725781    schedule 23.07.2017


Ответы (1)


Сначала я предлагаю вам повторить возвращаемое значение $_SERVER['DOCUMENT_ROOT'], чтобы убедиться, что оно показывает ожидаемый путь. Делайте это в локальной среде, конечно.

<?php echo $_SERVER['DOCUMENT_ROOT']; ?>

Ваш каталог конфигурации (для части пути, используемого для include()) должен находиться непосредственно внутри вашего корневого каталога документа, чтобы этот путь работал, поэтому проверка того, какой путь возвращается первым, поможет вам в этом.

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

<?php include($_SERVER['DOCUMENT_ROOT'] . "/SOME_DIR/config/db_config.php"); ?>

Другой вариант для вас: если вы хотите включить этот файл в несколько файлов в каталогах с разной глубиной, вы также можете сформировать относительный путь, используя двойные точки, например...

<?php include('../config/db_config.php'); ?>

Приведенное выше даст вам доступ к файлу config/db_config.php, расположенному над текущим каталогом, а следующее даст вам доступ к файлу, находящемуся на два каталога выше текущего каталога, в котором находится ваш текущий файл.

<?php include('../../config/db_config.php'); ?>

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

Последнее, что вы могли бы попробовать, хотя я не уверен, что это относится только к объектно-ориентированному программированию (ООП), но вы можете попробовать пометить переменную как глобальную, прежде чем использовать ее.

<?php

global $area_result;

while ($row = mysqli_fetch_array($area_result)) {
    echo "<li class='location-list-item'><a href='location/$row[name]'><span class='initial-letter'>".mb_substr($row['name'],0,1)."</span>".$row['name']." <i class=\"fa fa-chevron-circle-right\" aria-hidden=\"true\"></i></a></li>";
}

?>

Надеюсь, я помог вам и решил вашу проблему. :)

person Persona Clix    schedule 23.07.2017