我正在用PHP构建POP3邮箱。 我有以下文件:
现在,我有页面 mailbox.php来显示收件箱和showmail.php来显示每封邮件。用户的凭据存储在.ini文件中,并在必要时使用。问题是,我在mailbox.php和showmail.php中都有一个require_once('core.php')
我能够显示收件箱(即$ inbox有值),但是,如果我选择阅读邮件(showmail.php的弹出窗口),$ inbox是一个空数组。
$ inbox在core.php
中定义为静态数组答案 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中所做的事情有关。