我正在用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中定义为静态数组
静态数据仅在类的上下文中是静态的,这意味着类中的静态数据成员由该类的所有实例共享.
您似乎在谈论的是跨多个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(),它将阻塞直到第一个脚本完成执行或释放会话.