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

跨多个.PHP页面的PHP静态变量,php,static-variables,Php,Static Variables,我正在用PHP构建一个POP3邮箱。 我有以下文件: server_access.php从POP3服务器获取邮件 data_access.php,用于将邮件提取/写入本地数据库 php解析mime内容 php使用上述文件并将解析后的邮件存储为名为$inbox的assoc数组 现在,我有了显示收件箱的mailbox.php页面和显示每封邮件的showmail.php页面。用户的凭据存储在.ini文件中,并在必要时使用。问题是,我在mailbox.php和showmail.php中都使用requir

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

server_access.php从POP3服务器获取邮件 data_access.php,用于将邮件提取/写入本地数据库 php解析mime内容 php使用上述文件并将解析后的邮件存储为名为$inbox的assoc数组 现在,我有了显示收件箱的mailbox.php页面和显示每封邮件的showmail.php页面。用户的凭据存储在.ini文件中,并在必要时使用。问题是,我在mailbox.php和showmail.php中都使用require_once'core.php'

我可以显示收件箱,即$inbox有值,但是,如果我选择读取showmail.php的邮件弹出窗口,$inbox是一个空数组


$inbox在core.php中定义为静态数组。静态数据仅在类的上下文中是静态的,这意味着类中的静态数据成员由该类的所有实例共享

您所谈论的似乎是跨多个HTTP请求的数据持久化。静态数据不能为您做到这一点。这就是$u会话数据的用途

换句话说:一旦脚本完成了对当前请求的服务,它就会完全死掉。所有数据都已完全清理。新请求重新开始

会话数据会一直存在,直到PHP决定清理它或手动销毁它。通常,使用会话数据所需做的全部工作都放在脚本中:

脚本1:mailbox.php

脚本2:showmail.php


需要注意的一点是:如果您的脚本是长时间运行的,请尝试尽快加入一个session_commit,因为session访问在PHP中会被阻塞,这意味着如果另一个脚本尝试为同一用户启动会话,它将一直阻止,直到第一个脚本完成执行或释放会话。

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

您所谈论的似乎是跨多个HTTP请求的数据持久化。静态数据不能为您做到这一点。这就是$u会话数据的用途

换句话说:一旦脚本完成了对当前请求的服务,它就会完全死掉。所有数据都已完全清理。新请求重新开始

会话数据会一直存在,直到PHP决定清理它或手动销毁它。通常,使用会话数据所需做的全部工作都放在脚本中:

脚本1:mailbox.php

脚本2:showmail.php


需要注意的一点是:如果您的脚本是长时间运行的,请尝试尽快加入一个session_commit,因为session访问在PHP中会被阻塞,这意味着如果另一个脚本尝试为同一用户启动会话,它将一直阻止,直到第一个脚本完成执行或释放会话。

如果您的核心文件为mailbox.php提供了正确的数据,但不是showmail.php,它与您在showmail.php中正在做或没有做的事情有关。

如果您的核心文件为mailbox.php提供了正确的数据,但不是showmail.php,它与您在showmail.php中正在做或没有做的事情有关。

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

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

只是一个注释,require_once是一个语言构造而不是一个函数,因此它不需要括号。只是一个注释,require_once是一个语言构造而不是一个函数,因此它不需要括号。在mailbox.php中,我调用core.php中的一个函数,该函数从DB获取邮件并将其放入$inbox中。在showmail.php中,我假设$inbox已经包含数据。我不想再次点击数据库获取一封邮件。那么Cletus可能是对的,你可能忽略了使用会话的需要。你需要另一个DB调用,如果你做得对,它可能不会太贵。在mailbox.php中,我调用core.php中的一个函数,该函数从DB获取邮件并将其放入$inbox中。在showmail.php中,我假设$inbox已经包含数据。我不想再次点击数据库获取一封邮件。那么Cletus可能是对的,你可能忽略了使用会话的需要。你需要另一个DB调用,如果你做得对,它可能不会太贵。让你的软件工作,然后担心减少数据库调用的数量。我只为一个本地用户做这个应用程序。可以改用$\u服务器吗?$\u服务器无法正常工作。它是自动创建的,并使用来自请求服务器名称等的数据填充,而不像$\u会话那样是持久的
他的情况下,我应该在脚本中的何处放置session_close?或者,我应该避免在脚本中完全关闭会话吗?因为,如果我这样做了,那么会话不会每次都关闭,并且我将无法跨多个请求持久化变量,对吗?我只为一个本地用户做这个应用程序。可以改用$\u服务器吗?$\u服务器无法正常工作。它是自动创建的,并使用来自请求服务器名称等的数据填充,不像$\u SESSION那样是持久的。嘿,在这种情况下,我应该将SESSION\u close放在脚本中的什么位置?或者,我应该避免在脚本中完全关闭会话吗?因为,如果我这样做了,那么会话不会每次都关闭,并且我将无法跨多个请求持久化变量,对吗?
session_start();
$_SESSION['mailbox'] = array( /* messages */ );
session_start();
$mailbox = $_SESSION['mailbox'];