Включаемый файл PHP ведет себя странно после вызова JQuery

Прошло некоторое время с тех пор, как я наткнулся на этот сайт. До сих пор я просматривал вопросы, заданные разными пользователями, и использовал советы, данные комментаторами, для решения своих проблем и проблем с кодом. К сожалению, мне не удалось найти сообщение, относящееся к моей текущей проблеме, поэтому я публикую свою самую первую ветку помощи.

Я использую файл include.php в своем приложении, который включает в себя все соответствующие файлы для моего проекта. Файл находится в подкаталоге «includes», поэтому его путь — «includes/include.php». Все работало нормально с тех пор, как я начал программировать, до моего последнего решения начать использовать JQuery в своих кодах. Поскольку я новичок в обоих этих языках, я столкнулся с неприятной проблемой при попытке загрузить определенный файл PHP в один из моих HTML-разделов. Вместо того, чтобы тратить свое время на словесные объяснения вам, в чем проблема, я просто пойду вперед и покажу ее вам.

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

require_once "/includes/include.php";

Содержимое моего файла «include» просто включает остальные файлы, это выглядит так:

require_once 'user.php';
require_once 'db.php';

С этими файлами все работает. Теперь у меня есть другой включаемый файл, файл сценария, который я использую в середине своего кода, чтобы опубликовать определенный HTML-скрипт. Я использую следующий код, чтобы загрузить его в свой основной файл PHP:

<?php include '/includes/script_files/loadAdminMessageClass.php'; ?>

Все работает просто отлично до сих пор. Проблема начинается, когда я пытаюсь обновить определенный div с помощью JQuery и повторно загрузить тот же файл loadAdminMessageClass в этот div. Это строка кода, которую я использую для перезагрузки div:

$('#div_adminMessage').load('/includes/script_files/loadAdminMessageClass.php');

Здесь начинается проблема. С этого момента строка «require_once»/includes/include.php в первом «loadAdminMessageClass» не работает. Следующая ошибка возникает в моем div после процесса перезагрузки:

Предупреждение: require_once(/includes/include.php) [function.require-once]: не удалось открыть поток: нет такого файла или каталога в C:\wamp\www\includes\script_files\loadAdminMessageClass.php в строке 8

Неустранимая ошибка: require_once() [function.require]: не удалось открыть требуемый '/includes/include.php' (include_path='.;C:\php5\pear') в C:\wamp\www\includes\script_files\loadAdminMessageClass .php в строке 8

Я искал эту проблему целую вечность, и ничто не было похоже на ответ, который я искал. Похоже, когда я вызываю файл «loadAdminMessageClass.php» из JQuery, он не будет обрабатывать вызов «require_once» так, как должен.

--

Буду рад получить ответ на этот мой вопрос. Спасибо.


person Tommy Naidich    schedule 31.05.2013    source источник
comment
Ваш путь к вашему включаемому файлу явно неверен. Попробуйте использовать __dir__, чтобы помочь вам сделать это правильно.   -  person John Conde    schedule 31.05.2013
comment
Я не знаю, как сообщение об ошибке может быть более явным в отношении того, что не так.   -  person crush    schedule 31.05.2013
comment
Путь был задан неправильно. Хотя проблема решена, спасибо.   -  person Tommy Naidich    schedule 31.05.2013


Ответы (2)


Я действительно удивлен, что эта строка работает:

require_once "/includes/include.php";

Это относится к корню файловой системы вашего сервера. Вы ошибочно предполагаете, что PHP учитывает корень документа вашего веб-сайта при построении путей включения.

Вы должны явно получить $_SERVER['DOCUMENT_ROOT'], чтобы узнать, где работает веб-сайт (обычно что-то вроде /var/www/mywebsite или /home/user/public_html), а затем построить пути оттуда:

define('ROOT_PATH', $_SERVER['DOCUMENT_ROOT']);
require_once ROOT_PATH.'/includes/include.php';
person Niels Keurentjes    schedule 31.05.2013
comment
Это действительно было решением для меня. Спасибо большое. - person Tommy Naidich; 31.05.2013

Вы должны попробовать это

require_once dirname(__FILE__) . '/includes/include.php';
person lakshya_arora    schedule 31.05.2013
comment
Начиная с PHP5.3 вы можете использовать __DIR__ вместо dirname(__FILE__). - person Niels Keurentjes; 31.05.2013