PHP не работает после метода load (), чтобы обновить div

0

У меня внутри моего 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

почему путь должен быть другим? как я могу это исправить?

  • 2
    Используйте абсолютный путь вместо относительного
  • 0
    Я не люблю использовать абсолютные пути, и я хотел бы понять и понять, почему это не работает
Показать ещё 4 комментария
Теги:
path

2 ответа

3
Лучший ответ

Ваша ошибка объясняет все это:

Предупреждение: 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 на основе системных настроек.

  • 0
    Поместите его в общий файл, который используется всеми файлами. Если не существует, создайте его. И, возможно, используйте require_once вместо require чтобы избежать конфликтов, если он случайно загружается более одного раза.
1

Когда страница отображается в первый раз, ваши пути выглядят так:

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__) всегда будет предоставлять каталог в вашей файловой системе, который находится выше, чем текущий скрипт.

  • 0
    Вы имеете в виду dirname(__FILE__) правильно? Кроме того, проблема с магической константой __FILE__ заключается в том, что «содержит абсолютный путь с разрешенными символическими ссылками», что может нарушить работу систем, в которых неразрешенные символические ссылки используются в качестве путей. Более подробная информация здесь: php.net/manual/en/language.constants.predefined.php
  • 0
    @JakeGould Нет, это dirname(__DIR__) , иначе вы снова окажетесь в том же каталоге. Кроме того, хотя вы можете быть правы в отношении разрешаемых символических ссылок, если они не появляются в вашем проекте (что плохо, imho), с вами все будет в порядке.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню