質問

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で行っている(またはしていない)ことに関連しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top