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

Я создаю почтовый ящик 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: mailbox.php

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

Сценарий 2: showmail.php

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

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

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

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