Dekmer
@Dekmer
Программирую за еду ...

Как можно использовать результат запроса из другого файла?

Доброго времени !
В проекте использую несколько файлов PHP. Один global.php, в котором описана переменная:
global $all_search;.
Главный файл mainpage.php в котором использую объект XMLHttpRequest для формирования запроса без перезагрузки страницы. Ответом отображаю табличные данные на главной странице. Запрос идет в файл poisk.php, в котором использую ту самую переменную из файла global.php:
$all_search = R::getAll($sql_1);
Файл global.php подключается и в poisk.php и в mainpage.php
require 'global.php';
Все работает - все ОК.
Но мне нужно в файле mainpage.php повторно использовать результат запроса (для вывода на печать найденных записей) в переменной $all_search, а она пустая.
Я так понимаю можно повторно сделать запрос и ответ использовать в нужно месте.
Или можно по-другому ?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
@rPman
Предпологаю что речь идет о веб бакэнде - приложении, запускаемом на веб сервере по запросу из браузера. И главное, предполагаю что используется cgi подход, когда на каждый запрос из браузера запускается отдельный процесс php (даже если это модуль веб сервера, он конечно оптимизируется до асинхронных потоков) но содержимое памяти каждый раз пустое.

Если у тебя mainpage.php и poisk.php это разные запросы, то через глобальные переменные данные между ними не передать.

Нужна какая-нибудь база данных, чем бы она не являлась, например:
* хранить в специальных заголовках запроса - cookies, эти данные как мяч будут автоматически передаваться между клиентом и сервером, т.е. все запросы от клиента будут содержать копию всех установленных cookies, до истечения их времени жизни
* переменные сессии (используются cookies автоматически)
сессия доступна сразу после session_start() а данные через ассоциативный массив $_SESSION (автоматически сохраняется по окончанию скрипта, учти это при параллельных запросах), идентификатор сессии автоматически поддерживается в заголовках запроса (сессия стартует когда пользователь открывает сайт, и единая для других окон, адже после перезапуска браузера, время жизни опция cookie_lifetime)
Очень часто идентификаторы сессии или специально созданное значение в ней используется как идентификатор для поиска данных в других местах (например БД)
* можно использовать файлы, в которых данные хранятся в сериализованном виде, в php штатно работает var_export/eval, serialize/unserialize, json_encode/json_decode - текстовые и бинарный igbinary_serialize/igbinary_unserialize (очень эффективный формат) или свой собственный, по желанию
* можно использовать базу данных, начиная с sqlite (размещается в файле но работа с помощью sql), настоятельно рекомендую PDO - универсальная прослойка для работы с реляционными БД
* есть еще всякие memcache, apcu, или к примеру самописный сервер данных (на сокетах и не только) но применимость - отдельный разговор

p.s. есть иной подход, когда на php пишется полноценный веб сервер, принимающий http запросы (его напрямую редко пускают в интернет, обычно ставят еще какой-нибудь nginx для поддержки ssl и других тонкостей), в этом случае php приложение скорее всего - один инстанс (один процесс), который не завершается по завершению запроса, обрабатывает запросы клиентов асинхронно, в этом случае глобальные переменные будут доступны между запросами.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Прочтите внимательно вот это.
После этого вам должны стать очевидны ошибки в ваших рассуждениях.

Главный файл mainpage.php в котором использую объект XMLHttpRequest

Не в файле mainpage.php, а в браузере. Никакого РНР и тем более его переменных там нет.

мне нужно в файле mainpage.php повторно использовать результат запроса

Не в файле mainpage.php, а в браузере. Никакого РНР и тем более его переменных там нет.
А переменная яваскрипт с результатом запроса - есть. Вот её и используйте.

Один global.php, в котором описана переменная: global $all_search;.

А это, как я понимаю, просто бессмысленный файл, который можно смело удалить. Ну или только эту переменную, если там есть что-то ещё.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы