質問
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で静的配列として定義されています
解決
静的データはクラスのコンテキスト内でのみ静的です。つまり、クラス内の静的データメンバーはそのクラスのすべてのインスタンスで共有されます。
あなたが話しているように見えるのは、複数のHTTPリクエストにまたがって持続するデータです。静的データはあなたのためにそれを行いません。それが$ _SESSIONデータの目的です。
別の言い方をすれば、スクリプトが現在のリクエストの処理を完了すると、スクリプトは完全に停止します。すべてのデータが完全にクリーンアップされました。新しいリクエストは新たに始まります。
セッションデータは、PHPがクリーンアップを決定するか、手動で破棄するまで保持されます。通常、セッションデータを使用するために必要な作業は、スクリプトに追加するだけです。
スクリプト1:mailbox.php
session_start();
静的データはクラスのコンテキスト内でのみ静的です。つまり、クラス内の静的データメンバーはそのクラスのすべてのインスタンスで共有されます。
あなたが話しているように見えるのは、複数のHTTPリクエストにまたがって持続するデータです。静的データはあなたのためにそれを行いません。それが$ _SESSIONデータの目的です。
別の言い方をすれば、スクリプトが現在のリクエストの処理を完了すると、スクリプトは完全に停止します。すべてのデータが完全にクリーンアップされました。新しいリクエストは新たに始まります。
セッションデータは、PHPがクリーンアップを決定するか、手動で破棄するまで保持されます。通常、セッションデータを使用するために必要な作業は、スクリプトに追加するだけです。
スクリプト1:mailbox.php
session_start();
$mailbox = 静的データはクラスのコンテキスト内でのみ静的です。つまり、クラス内の静的データメンバーはそのクラスのすべてのインスタンスで共有されます。
あなたが話しているように見えるのは、複数のHTTPリクエストにまたがって持続するデータです。静的データはあなたのためにそれを行いません。それが$ _SESSIONデータの目的です。
別の言い方をすれば、スクリプトが現在のリクエストの処理を完了すると、スクリプトは完全に停止します。すべてのデータが完全にクリーンアップされました。新しいリクエストは新たに始まります。
セッションデータは、PHPがクリーンアップを決定するか、手動で破棄するまで保持されます。通常、セッションデータを使用するために必要な作業は、スクリプトに追加するだけです。
スクリプト1:mailbox.php
session_start();
静的データはクラスのコンテキスト内でのみ静的です。つまり、クラス内の静的データメンバーはそのクラスのすべてのインスタンスで共有されます。
あなたが話しているように見えるのは、複数のHTTPリクエストにまたがって持続するデータです。静的データはあなたのためにそれを行いません。それが$ _SESSIONデータの目的です。
別の言い方をすれば、スクリプトが現在のリクエストの処理を完了すると、スクリプトは完全に停止します。すべてのデータが完全にクリーンアップされました。新しいリクエストは新たに始まります。
セッションデータは、PHPがクリーンアップを決定するか、手動で破棄するまで保持されます。通常、セッションデータを使用するために必要な作業は、スクリプトに追加するだけです。
スクリプト1:mailbox.php
<*>
スクリプト2:showmail.php
<*>
注意点:スクリプトが長時間実行されている場合、セッションアクセスがPHPでブロックされるため、できるだけ早くsession_commit()を試行してください。つまり、別のスクリプトが同じユーザーのsession_start()最初のスクリプトが実行を完了するか、セッションを解放するまで。
SESSION['mailbox'] = array( /* messages */ );
スクリプト2:showmail.php
<*>
注意点:スクリプトが長時間実行されている場合、セッションアクセスがPHPでブロックされるため、できるだけ早くsession_commit()を試行してください。つまり、別のスクリプトが同じユーザーのsession_start()最初のスクリプトが実行を完了するか、セッションを解放するまで。
SESSION['mailbox'];
スクリプト2:showmail.php
<*>
注意点:スクリプトが長時間実行されている場合、セッションアクセスがPHPでブロックされるため、できるだけ早くsession_commit()を試行してください。つまり、別のスクリプトが同じユーザーのsession_start()最初のスクリプトが実行を完了するか、セッションを解放するまで。
SESSION['mailbox'] = array( /* messages */ );
スクリプト2:showmail.php
<*>注意点:スクリプトが長時間実行されている場合、セッションアクセスがPHPでブロックされるため、できるだけ早くsession_commit()を試行してください。つまり、別のスクリプトが同じユーザーのsession_start()最初のスクリプトが実行を完了するか、セッションを解放するまで。
他のヒント
php Sessionsには、リクエスト間のセッションデータを保存する場所が必要です。あなたの場合、それはあなたのホームディレクトリのtemp \ php \ session \フォルダです。そのフォルダを作成するか、有効なディレクトリを指すようにphp.iniのsession.save_pathを変更します。
core
ファイルがmailbox.phpに正しいデータを提供するが、showmail.phpに提供しない場合は、showmail.phpで行っている(またはしていない)ことに関連しています。