Статические переменные PHP на нескольких страницах .php

StackOverflow https://stackoverflow.com/questions/601307

  •  03-07-2019
  •  | 
  •  

Вопрос

Я создаю почтовый ящик POP3 на PHP.У меня есть следующее файлы:

  • server_access.php (получать почту с POP3-сервера)
  • data_access.php (который извлекает/записывает почту в локальную БД)
  • mime_parser.php (анализирует содержимое MIME)
  • core.php (использует указанные выше файлы и сохраняет проанализированную почту в виде ассоциированного массива с именем $inbox)

Теперь у меня есть страницы mailbox.php для отображения папки «Входящие» и showmail.php для отображения каждого письма.Учетные данные пользователя хранятся в файле .ini и используются по мере необходимости.Дело в том, что я делаю require_once('core.php') как в mailbox.php, так и в showmail.php.

Я могу отобразить почтовый ящик (т.В $inbox есть значения), однако, если я выберу чтение почты (всплывающее окно showmail.php), $inbox станет пустым массивом.

$inbox определяется как статический массив в core.php.

Это было полезно?

Решение

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

Кажется, вы говорите о том, что данные сохраняются в нескольких HTTP-запросах.Статические данные не сделают этого за вас.Вот для чего нужны данные $_SESSION.

Другими словами:как только сценарий завершает обслуживание текущего запроса, он полностью умирает.Все имеющиеся данные полностью очищены.Новый запрос начинается заново.

Данные сеанса сохраняются до тех пор, пока PHP не решит их очистить или вы не уничтожите их вручную.Обычно все, что вам нужно сделать для использования данных сеанса, помещается в ваш скрипт:

Сценарий 1:почтовый ящик.php

session_start();
$_SESSION['mailbox'] = array( /* messages */ );

Скрипт 2:showmail.php

session_start();
$mailbox = $_SESSION['mailbox'];

Следует отметить одну вещь:если ваш скрипт работает долго, попробуйте как можно скорее добавить session_commit(), потому что доступ к сеансу блокируется в PHP, то есть, если другой скрипт попытается выполнить session_start() для того же пользователя, он будет блокироваться до тех пор, пока первый скрипт не завершит выполнение или не будет выпущен. сессия.

Другие советы

php Sessions требуется место для хранения данных сеанса между запросами.В вашем случае это папка temp\php\session\ в вашем домашнем каталоге.Либо создайте эту папку, либо измените session.save_path в php.ini, чтобы он указывал на действительный каталог.

Если ваш core файл предоставляет правильные данные для mailbox.php, но не для showmail.php, он связан с тем, что вы делаете (или не делаете) в showmail.php.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top