2009-03-02 54 views
1

我在PHP中構建POP3郵箱。 我有以下文件跨越多個.php頁面的PHP靜態變量

  • server_access.php(從POP3服務器上獲取郵件)
  • data_access.php(其中獲取/寫郵件到本地數據庫)
  • mime_parser.php(解析MIME內容)
  • core.php中(使用上述文件並存儲解析郵件作爲assoc命令數組名爲$收件箱)

現在,我有pages mailbox.php顯示收件箱和showmail.php顯示每封郵件。用戶的憑證存儲在.ini文件中,並根據需要使用。事情是,我在mailbox.php和showmail.php中都做了require_once('core.php')

我能夠顯示收件箱(即$ inbox有值),但是,如果我選擇要閱讀郵件(showmail.php的彈出窗口),$ inbox是一個空數組。

$收件箱是定義爲在core.php中的靜態數組

+0

請注意,require_once是一種語言結構,不是函數,因此它不需要括號。 – alex 2009-03-02 05:11:46

回答

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()它會阻塞,直到第一個腳本完成執行或釋放會話。

+0

'郵箱'是錯誤的嗎? – 2009-03-02 05:14:20

+0

是的,修好了,謝謝。 – cletus 2009-03-02 05:32:24

0

如果您的core文件向mailbox.php提供了正確的數據,但不是showmail.php,它與您在(或不)在showmail.php中執行的操作有關。

2

php會話需要一個地方在請求之間存儲會話數據。在你的情況下,它是你的主目錄中的一個temp \ php \ session \文件夾。無論是創建該文件夾或更改php.ini中的session.save_path指向一個有效的目錄。