У меня внутри моего div php требуется
require('inc/coreturni/list.php');
что требует снова подключения db
require('inc/connect.inc.php');
и они работают, когда я загружаю страницу.
но если я попытаюсь обновить div, обновив первый файл include после события click, с загрузкой jquery()
Я получил следующую ошибку пути:
Предупреждение: require (inc/connect.inc.php): не удалось открыть поток: нет такого файла или каталога в C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php в строке 2
Неустранимая ошибка: require(): сбой открытия: "inc/connect.inc.php" (include_path = '; C:\xampp\php\PEAR') в C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php в строке 2
почему путь должен быть другим? как я могу это исправить?
Ваша ошибка объясняет все это:
Предупреждение: require (inc/connect.inc.php): не удалось открыть поток: нет такого файла или каталога в C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php в строке 2
Неустранимая ошибка: require(): сбой открытия: " inc/connect.inc.php " (include_path = '; C:\xampp\php\PEAR') в C:\xampp\htdocs\taximat\inc\coreturni\list.inc.php в строке 2
Обратите внимание, как он говорит, что он не может найти inc/connect.inc.php
в этом каталоге:
C:\xampp\htdocs\taximat\inc\coreturni
Это потому, что ваши require
ссылаться на относительные пути. Поэтому, когда загружается файл list.inc.php
, require
предполагает, что inc/connect.inc.php
находится в C:\xampp\htdocs\taximat\inc\coreturni
. Вот почему он терпит неудачу.
Вы должны установить базовый путь в своем приложении. Просто примечание о том, что я неясен в синтаксисе "вперед-вниз" или "назад-слэш" в таком случае, поскольку я работаю в основном на системах Mac и Unix, а ошибка показывает пути к файлам Windows, но PHP показывает пути Unix.
$BASE_PATH='/xampp/htdocs/taximat/inc/coreturni/';
И потребуются все файлы вроде этого:
require($BASE_PATH . 'inc/coreturni/list.php');
А вот так:
require($BASE_PATH . 'inc/connect.inc.php');
Таким образом, независимо от того, откуда вызывается файл, require
будет использовать абсолютный путь к файлу. И так как $BASE_PATH
- это одноразовая переменная, которую вы установили, вы можете просто установить ее в свой основной файл конфигурации и не беспокоиться об этом. Чтобы сделать код переносимым, просто измените $BASE_PATH
на основе системных настроек.
require_once
вместо require
чтобы избежать конфликтов, если он случайно загружается более одного раза.
Когда страница отображается в первый раз, ваши пути выглядят так:
page.php
inc/
coreturni/
list.php
connect.php
Другими словами, все require
утверждения будут относительными, как видно из page.php
.
Однако, когда вы запрашиваете list.php
напрямую с помощью AJAX, он выглядит более как это:
list.php
../
connect.php
Теперь require
должно было быть для ../connect.php
.
Решение
Один из способов решения этой проблемы - вычисление абсолютного пути на основе обрабатываемого файла (т.е. list.php
) следующим образом:
require dirname(__DIR__) . '/connect.php';
Конструкция dirname(__DIR__)
всегда будет предоставлять каталог в вашей файловой системе, который находится выше, чем текущий скрипт.
dirname(__FILE__)
правильно? Кроме того, проблема с магической константой __FILE__
заключается в том, что «содержит абсолютный путь с разрешенными символическими ссылками», что может нарушить работу систем, в которых неразрешенные символические ссылки используются в качестве путей. Более подробная информация здесь: php.net/manual/en/language.constants.predefined.php
dirname(__DIR__)
, иначе вы снова окажетесь в том же каталоге. Кроме того, хотя вы можете быть правы в отношении разрешаемых символических ссылок, если они не появляются в вашем проекте (что плохо, imho), с вами все будет в порядке.