1

PHP で POP3 メールボックスを作成しています。次のファイルがあります。

  • server_access.php (POP3 サーバーからメールを取得)
  • data_access.php (ローカル DB へのメールのフェッチ/書き込み)
  • 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 で静的配列として定義されています

4

3 に答える 3

10

静的データは、クラスのコンテキスト内でのみ静的です。つまり、クラス内の静的データ メンバーは、そのクラスのすべてのインスタンスによって共有されます。

あなたが話しているように見えるのは、複数の HTTP リクエスト間で持続するデータです。静的データではそれができません。それが $_SESSION データの目的です。

別の言い方をすれば、スクリプトが現在のリクエストの処理を終了すると、スクリプトは完全に終了します。すべてのデータが完全にクリーンアップされました。新しいリクエストが新たに開始されます。

セッション データは、PHP がクリーンアップを決定するか、手動で破棄するまで存続します。通常、セッション データを使用するために必要なことはすべて、スクリプトに記述します。

スクリプト 1: mailbox.php

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

スクリプト 2: showmail.php

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

注意すべき点: スクリプトが長時間実行されている場合は、セッション アクセスが PHP でブロックされるため、できるだけ早く session_commit() を実行してみてください。つまり、別のスクリプトが同じユーザーに対して session_start() を試行すると、最初のセッションまでブロックされます。スクリプトの実行が終了するか、セッションが解放されます。

于 2009-03-02T05:01:43.743 に答える
2

php セッションには、リクエスト間のセッション データを保存する場所が必要です。あなたの場合、それはホームディレクトリの temp\php\session\ フォルダーです。そのフォルダを作成するか、php.ini の session.save_path を変更して、有効なディレクトリを指すようにします。

于 2009-03-02T07:21:41.083 に答える
0

ファイルが正しいデータを mailbox.php に提供し、showmail.php に提供しない場合core、それは showmail.php で行っている (または行っていない) 何かに関連しています。

于 2009-03-02T05:05:01.207 に答える