跨多个.php页面的PHP静态变量

时间:2009-03-02 04:57:37

标签: php static-variables

我正在用PHP构建POP3邮箱。 我有以下文件

  • server_access.php(从POP3服务器获取邮件)
  • data_access.php(将邮件提取/写入本地数据库)
  • mime_parser.php(解析MIME内容)
  • core.php(使用上述文件并将已解析的邮件存储为名为$ inbox的关联数组)

现在,我有页面 mailbox.php来显示收件箱和showmail.php来显示每封邮件。用户的凭据存储在.ini文件中,并在必要时使用。问题是,我在mailbox.php和showmail.php中都有一个require_once('core.php')

我能够显示收件箱(即$ inbox有值),但是,如果我选择阅读邮件(showmail.php的弹出窗口),$ inbox是一个空数组。

$ inbox在core.php

中定义为静态数组

3 个答案:

答案 0 :(得分:10)

静态数据仅在类的上下文中是静态的,这意味着类中的静态数据成员由该类的所有实例共享。

您似乎在谈论的是跨多个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(),它将阻止直到第一个脚本完成执行或释放会话。

答案 1 :(得分:2)

php Sessions需要一个位置来存储请求之间的会话数据。在您的情况下,它是您的主目录中的temp \ php \ session \文件夹。创建该文件夹或将php.ini中的session.save_path更改为指向有效目录。

答案 2 :(得分:0)

如果你的core文件向mailbox.php提供了正确的数据,而不是showmail.php,则它与你在(或不是)在showmail.php中所做的事情有关。