1

最初に満たすための要件を置きましょう

PHPゲートウェイ、および現在私がで定義している多くの定数を使用する一連のリクエストconstants.phpハンドラーdefine('conts','value');

この定数は、次のようなプロパティファイルで定義できます。

const1 =val1
const2 = val2
const3 = val3

いくつかの外部ファイルで、実行時gateway.propertiesにそれを言ってロードします。define()これを1回限りのアクションにして、phpによって作成された多くのスレッドが、再度リロードすることなく、この定数にさらにアクセスできるようにすることはできますか?

これが本当に可能かどうかはわかりませんが、専門家のアドバイスが必要です。

ありがとう

4

5 に答える 5

1

結果のオブジェクトをmemcachedに詰め込むことでこれを処理します。

これには明らかにいくらかのオーバーヘッドがあります。自分の状況に合っているかどうかを検討する必要があります。3つの変数の場合、まったく意味がありません。300,000の場合、多分そうなるでしょう。それをテストして見てください。

于 2012-11-02T05:18:40.957 に答える
1

PHPでは、.iniファイルを使用して使用することをお勧めします

http://php.net/manual/en/function.parse-ini-file.php またはphp.net/manual/en/function.parse-ini-string.phpファイルをすでに文字列に読み込んでいる場合。

apcを使用して、ファイルをまだキャッシュされていない場合は読み取りにフォールバックしてメモリにキャッシュし、次にキャッシュすることができます。

<?php
$ini = apc_fetch('configuration');
if (!$ini) {
    $ini = file_get_contents('path/to/ini.ini');
    if ($ini) {
        apc_store('configuration',$ini);
    }
}
$config = parse_ini_string($ini);
于 2012-11-02T05:25:43.407 に答える
0

各行を読み取り、=を解析して、forループで定義することができます。

于 2012-11-02T05:18:13.613 に答える
0

これを行う最も簡単な方法は、値を.iniファイルに保存してから、を使用してファイルを読み込むことですparse_ini_file()。iniファイルは次のようになります。

var1 = 'blah blah blah'
var2 = 'more blah'

PHPはこれらのファイルを非常に高速に読み取ります。すべての値を定数に変換するのではなく、.iniファイルから取得した連想配列を単一のグローバル変数に格納することをお勧めします。仕事をしましょう、同じ可視性。

実際にキャッシュを設定している場合は、APCキャッシュを使用できます。数ミリ秒節約できますが、かなり大きな値のセットについて話しているのでない限り、違いはありません。define()また、すべての値を定数に変換することを主張する場合は、各値を呼び出す必要があります。単一のグローバル連想配列を保存する方がはるかに高速です。

于 2012-11-02T05:29:24.837 に答える
0

グローバルにアクセスしやすい静的クラスの使用を検討してください。
パブリック静的メンバーのみを使用してクラスを作成でき、CLASS :: init()はオプションの構成ファイルを呼び出して変数を置き換えます。
値が欠落している場合は、デフォルトのままになります。
したがって、CLASS:$ STATIC_VARを使用して、どこからでも構成にアクセスできます。

init関数:

            $vars = parse_ini_file(dirname(__FILE__) .'/'. $filename,true,INI_SCANNER_TYPED);
            if ($vars)
            {
                foreach ($vars as $key => $val) 
                {
                        if (property_exists(get_called_class(),$key)) self::$$key=$val;
                }
            }
于 2016-10-14T20:42:00.800 に答える