Статические переменные PHP на нескольких страницах .php - PullRequest
1 голос
/ 02 марта 2009

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 02 марта 2009

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

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

2 голосов
/ 02 марта 2009

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

0 голосов
/ 02 марта 2009

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

...