4

この計算の結果を変数内に保存するよりも、ファイルを読み取って計算を行う必要があります。

私はこれを一度だけ行う必要があります。Java +サーブレットでは、サーブレットコンテナと、たとえばシングルトンパターンを使用してこれを行うことができます。

PHPではこのように振る舞うことができないことを私は知っています。これを行うためのより良い方法はどれですか?計算をDBに保存(またはデータを転送)しますか?

4

1 に答える 1

9

いいえ、Java サーブレットのようには機能しません。回避策を見つける必要があります。

まず、「ユーザー セッション」ごとではなく、サーバーごと (またはアプリケーションごと) に状態を保存する必要があるため、一般的に $_SESSION、$_COOKIE、または $_REQUEST を使用することは実用的ではないと思います。

あなたの場合、データベースを使用することは実用的です。通常のアプリケーション設計では、これが最も一般的なソリューションになります。

また、PHP のシリアル化機能を使用して、次のようなこともできます。

<?php

$resultfile = 'result.dat';
if(!file_exists($resultfile)) {
    $result = compute_result('foo bar');
    file_put_contents($resultfile, serialize($result));
} else {
    $result = unserialize(file_get_contents($resultfile));
}

PHP のserialize()試行を使用することは、次の場合に特に実用的です。

  • あなたはPHPのみの環境にいます
  • $resultは複雑なデータ型ですが、データベース構造を作成して $result もマップしたくありません

PHP のみの環境でない場合は、JSON または XML などの他のシリアライゼーション形式を好むかもしれません。

また、シリアル化の結果は、ファイルではなくデータベースに文字列として格納できます。ファイルではなくデータベースに保存すると、同じデータベース (クラスター) にアクセスするすべてのサーバーで結果を利用できるため、アプリケーションのスケーラビリティが向上します。

要するに、シリアライゼーションと組み合わせてデータベースを使用することをお勧めします。

于 2012-12-28T21:05:21.467 に答える