質問
いくつかのスクリプトを取得して、PHPが起動すると、いくつかの定数をグローバルメモリに自動的にロード/実行できるようにする設定があります。
ユーザー間でアクセス可能なグローバルメモリもありますか?また、メモリについては、すべてのユーザーがアクセスできるメモリはありませんか?ある人は、別の人がそれをアクセスするように設定するか、何かをデータベースの一時テーブルで共有するには、毎回ファイルを読み書きする必要があります。
驚いたPHPにはこれはありませんか?
ありがとう。
解決
私が正しく理解していれば、Apacheを起動するときにPHPにスクリプトを実行させ、グローバルに共有された値を保存する必要があります。間違っている場合は、編集/コメントしてください。
簡単な答えは、いいえ、できません。 PHPは、クライアントのリクエストを待って実行し続けるサーバーではありません。各HTTP要求を個別に処理します。
長い答えは:まあ... auto_prepend_fileを実行して、リクエストごとに実行できます。いくつかの単純なbashスクリプトを作成し、それを使用してApacheを起動し、PHPスクリプトを呼び出すことができますが、Apacheでは実行されません。
共有メモリに関しては、いくつかの選択肢があります。フラットファイル、データベース、またはmemcachedを使用するのがおそらく最もポータブルです。一部のインストールでは、共有メモリ機能が有効になっていますが、保証されていません。
他のヒント
PHPは、スクリプト間で共有されるグローバルキャッシュを提供しません。要件に応じてさまざまな方法でこれを回避できます。
計算コストが高くないグローバル定数を設定する場合、これらの定数を定義するスクリプトを記述し、要求されたファイルの前にこのスクリプトを自動的に実行できます。これは、php.iniの auto_prepend_fileオプションを使用して実行されます。
高価な値を計算している場合は、アクセス可能なグローバルキャッシュとして memcached を使用できます。すべてのPHPスクリプト。 PHPを使用してmemcachedに接続するための複数のクライアントAPI があります。
もちろん、ユーザーセッションにグローバル値を保存することもできますこれらの値がユーザーごとの場合。または、MySQLを使用します。
何らかのMVCフレームワークを使用している場合、そこで変数を定義し、毎回ファイルがロードされるようにすることができます。 $ GLOBALS ['var_name'] = $ value;を使用できます。そのリクエスト中に他のファイルでこれにアクセスします。
実行中のPHPスクリプトインスタンスにはそれぞれ独自のグローバル変数、関数、定数などがあり、実行中のスクリプトインスタンスから別のスクリプトインスタンスに変数を直接コピーする方法はありません。ただし、ファイル、データベース、またはmemcachedを使用するなどの間接的な方法があります。
サブシステム(APC共有メモリ、さらにはmemcachedなど)を使用する場合、起動スクリプト( /etc/init.d/ [apache2 | httpd]
)。たとえば、start | restartの直後に、curlまたはwgetリクエストをジェネレータスクリプトに追加できます。
最初の「外部」リクエストで初期化されていない状態になる可能性はわずかですが、それを処理できると確信しています。