8

PHPには、Javaサーバーのように、すべての接続でロード/アンロードされない「セッション外」変数を使用する方法がありますか?

正確さが足りないので失礼します。正しい書き方がわかりません。

主なアイデアは、次のようなものにすることです。

<?php
    ...
    // $variablesAlreadyLoaded is kind of "static" and shared between all PHP threads
    // No need to initialize/load/instantiate it.
    $myVar = $variablesAlreadyLoaded['aConstantValueForEveryone'];
    ...
?>

私はすでにこのようshmopなことや他の奇妙なことをしましたが、キャッシュシステム(APC、Redisなど)やデータベースを使用せずに「純粋なPHP」でこれを行う「クリーンな」方法がある場合。

編集1:

人々(私のために時間を費やしてくれた彼らのおかげで)はセッションで同じように私に答えているので、私は書くのを逃した制約を追加します:セッションはしないでください。

編集2:

このようなことを行うためのPHPネイティブメソッドは、共有メモリ(shmop)と名前付きパイプだけのようです。私は、メモリ管理(共有メモリブロックサイズ)やシステムの問題(パイプ)を気にせずに、管理された方法で共有オブジェクトにアクセスします。

次に、それを行うための関数/メソッドを提供するPHPモジュール/ライブラリをネットで閲覧しました。何も見つかりませんでした。

編集3:

@KFOが指摘した方法についていくつか調査したところ、putenv/setenvはオブジェクトを処理するように作成されていないようです(シリアル化は避けたいと思います)。したがって、文字列や数字などの短い「もの」の問題は解決されますが、より大きな/複雑なオブジェクトの問題は解決されません。

「envway」と別のメソッドを使用してより大きなオブジェクトを処理すると、一貫性がなくなり、コードと保守性が複雑になります。

編集4:

これを見つけました:DBus(GREE Lab DBus)、しかし私は仕事でそれをテストするためのツールを持っていません。誰かがそれをまだテストしましたか?

私はあらゆる提案を受け入れます。

ありがとう

編集5(「回答」):

DBusは私が探しているものではないため(「深刻な」アプリケーションの証拠がなく、サードパーティのモジュールをインストールする必要があります)、現在、その信頼性がすでに証明されているMemcacheを使用しています(@PeterMコメントに続いて、以下を参照) )。

4

4 に答える 4

5
// First page
session_id('same_session_id_for_all');
session_start();
$_SESSION['aConstantValueForEveryone'] = 'My Content';

// Second page
session_id('same_session_id_for_all');
session_start();
echo $_SESSION['aConstantValueForEveryone'];

これは、PHP でそのまま使用できます。(ランダムなユーザー固有の文字列ではなく) 同じセッション ID を使用して、すべての訪問者のセッションを初期化すると、すべてのユーザーに対して同じセッションになります。


目標を達成するためにセッションを使用することは本当に必要ですか、それとも定数を使用する方がよいでしょうか?

PHP の異なるスレッド間で情報を共有する純粋な PHP の方法はありません。「外部」ファイル/データベース/サーバー変数/セッションファイル ソリューションを除きます。


一部のコメンテーターが、トランスポート上のデータを破壊する可能性のあるセッション データのシリアル化/非シリアル化機能があることを指摘したため、解決策があります。PHP では、必要に応じてシリアル化および非シリアル化機能serialize_handlerを構成できます。https://www.php.net/manual/session.configuration.php#ini.session.serialize-handler参照_ __sleep()_ __wakeup()_またはリクエストのシリアル化を解除します。https://www.php.net/manual/language.oop5.magic.php#object.sleep ... PHP 5.1 以降、定義済みのSerializableインターフェースも利用可能です: https://www.php.net/manual/class .serializable.php

于 2013-02-26T10:18:39.457 に答える
2

.htaccess で変数を宣言できます。たとえばSetEnv APPLICATION_ENVIRONMENT production、関数を使用してアプリケーションでアクセスしますgetenv('APPLICATION_ENVIRONMENT')

于 2013-02-26T10:20:18.363 に答える
1

$_SESSION['aConstantValueForEveryone']同じドメインのどのページでも読めるという使い方ができると思います。

そのマニュアルを参照することを検討してください。

于 2013-02-26T10:15:16.053 に答える