ホームページ >バックエンド開発 >PHPチュートリアル >ファイルを変数に一度だけロードする方法
アプリケーションのシナリオは次のとおりです:
いくつかのキーと値のマッピング関係を含む 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ファイルを使用するためです。