我正在用 PHP 构建一个 POP3 邮箱。我有以下内容 文件:

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

现在,我有 页面 Mailbox.php 显示收件箱,showmail.php 显示每封邮件。用户的凭据存储在 .ini 文件中并根据需要使用。问题是,我在 mail.php 和 showmail.php 中都做了 require_once('core.php')

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

$inbox 在 core.php 中定义为静态数组

有帮助吗?

解决方案

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

您似乎在谈论的是跨多个 HTTP 请求持久保存的数据。静态数据不会为你做到这一点。这就是 $_SESSION 数据的用途。

换一种方式:一旦脚本完成当前请求的服务,它就会完全死亡。所有数据均已完全清理。新的请求重新开始。

会话数据将持续存在,直到 PHP 决定清理它或您手动销毁它。通常,使用会话数据所需要做的所有事情都放在脚本中:

脚本1:邮箱.php

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

脚本2:显示邮件.php

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

需要注意一件事:如果您的脚本长时间运行,请尝试尽快放入 session_commit() ,因为 PHP 中的会话访问会阻塞,这意味着如果另一个脚本尝试为同一用户执行 session_start() ,它将阻塞,直到第一个脚本完成执行或释放会议。

其他提示

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

如果你的 core 文件为mailbox.php提供了正确的数据,但不是showmail.php,它与您在showmail.php中正在(或没有)执行的操作相关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top