ホームページ  >  記事  >  バックエンド開発  >  ファイルを変数に一度だけロードする方法

ファイルを変数に一度だけロードする方法

WBOY
WBOYオリジナル
2016-06-23 14:02:07921ブラウズ

アプリケーションのシナリオは次のとおりです:
いくつかのキーと値のマッピング関係を含む CSV ファイルがありますが、これらは通常は変更されていません。
いくつかの異なるインターフェースがこのファイル内のデータを使用する必要があるため、一度ロードして他のインターフェースから呼び出したいと考えています。

シングルトン モードと _GLOBALS を使用する場合、インターフェイスを更新するたびに 1 回ロードされることは保証できません。

どうやって対処すればいいですか?


ディスカッションへの返信(解決策)

PHP は接続が短く、一度ロードしてから読み取るのは簡単ではありません

セッションまたは Cookie に保存します

CSV の内容を読み取るメソッドを作成しますファイル、シングルトンモードで呼び出しても大丈夫ですか?

セッションまたは Cookie に保存します

これは機能するはずです。

csv ファイルの内容を読み取ってシングルトン モードで呼び出すメソッドを記述しますが、それは実現可能ではないでしょうか?

シングルトン モードを使用して読み取ったデータは、静的変数に配置されます。
ただし、毎回ロードする必要があります。

ロードとはどういう意味ですか?

ロードとはどういう意味ですか?

静的なカウント変数を設定し、load_file が呼び出されるたびにそれを出力します。

2 つの異なるインターフェースでは、
どちらも
count = 1; を出力します

コードを投稿して確認するのが最善です。

コードを投稿して見てみるのが最善です。

<?phpclass ***{    private $description;       private static $instance;                   private function __construct()    {    }    public static function get_instance()    {        if (!(self::$instance instanceof self)){            self::$instance = new self;        }        return self::$instance;    }    private function load_file()    {        static $index = 0;        // load data..        echo "load_file: ".$index."<br>";        $index ++;    }    public function get_data($key)    {        if (empty($this->description)) {            $this->load_file();        }        if (array_key_exists($key, $this->description))            return $this->description[$key];        return array();    }}?>

毎回印刷
load_file: 0

$key、$this->description には値がありますか? ある場合、それらは何ですか?

各リクエストは別のプロセスであるため、「通常の変数」を共有することはできません。データは均一にアクセスできる場所に配置できます:
1. ファイル内 (元のファイルではありません... ふふふ、実際には k v 配列として保存できるので、そうする必要はありません)毎回 csv ファイルを読み取ります)
2. セッション中。
3. メモリ内 (memcached や redis などのメモリ キャッシュの原理、および kv の共通ストレージを参照)
4. データベース内。
5. 他の共有可能なストレージ。
重要なのは、一度ロードするかどうかではありません。しかし、それは負荷のパフォーマンスにあります。

$key、$this->description には値がありますか? ある場合、それらは何ですか?

は貴重です

各リクエストは別のプロセスであるため、「通常の変数」を共有することはできません。データは均一にアクセスできる場所に配置できます:
1. ファイル内 (元のファイルではありません... へー、実際には k v 配列として保存でき、読み取る必要はありません)毎回 csv ファイルを使用します)
2. セッション中。
3. メモリ内 (memcached や redis などのメモリ キャッシュの原理、および kv の共通ストレージを参照)
4. データベース内。
5. 他の共有可能なストレージ。
重要なのは、一度ロードするかどうかではありません。しかし、それは負荷のパフォーマンスにあります。

考えてセッションに入れてみました。 Load は fgetcsv を呼び出してデータを取得することです。実際、データはわずか約 400 行であり、使用する人はそれほど多くなく、パフォーマンスも問題ありません。

k v 配列として保存する場合、$GLOBALS[] に配置する必要がありますか?複数のphpファイルを使用するためです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:紐パズル〜次の記事:紐パズル〜