如何只載入一次檔案到變數中

來源:互聯網
上載者:User
應用情境是這樣子的:
我有一個csv的檔案,包含一些key-value的映射關係,一般情況下是不變的。
好幾個不同的介面都需要使用這個檔案中的資料,所以我想一次性載入,其它介面調用就行了。

我使用單例模式和_GLOBALS都不能保證load一次,每次重新整理介面都load一次。

請問如何處理?


回複討論(解決方案)

php是短串連,一次性載入然後讀取不好做

存入session或者cookie中

寫個方法讀取csv檔案內容,單例模式調用,不可行?

存入session或者cookie中

這個應該可以。

寫個方法讀取csv檔案內容,單例模式調用,不可行?

我使用單例模式讀取的資料放到了一個static變數裡面。
但每次還是要load。

要load是什麼意思?

要load是什麼意思?

我設定了一個static的count變數,每次調用load_file的時候就列印一下。

在兩個不同的介面上,
都列印
count = 1;

最好貼出代碼看看。

最好貼出代碼看看。

";        $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.session中。
3.記憶體中(參考memcached、redis等記憶體緩衝的原理,kv的常用儲存)
4.資料庫中。
5.其他可共用的storage中。
關鍵不在於是不是load一次。而在於load的效能。

$key, $this->description是否有值,有值的話,各是什嗎?

是有值的

由於每次請求都是單獨的進程,所以“普通變數”是無法共用的。可以將資料放置到可以統一訪問的地方:
1.檔案中(不就是你原來的檔案麼。。嘻嘻,其實可以存成k v數組,不必每次讀取csv檔案)
2.session中。
3.記憶體中(參考memcached、redis等記憶體緩衝的原理,kv的常用儲存)
4.資料庫中。
5.其他可共用的storage中。
關鍵不在於是不是load一次。而在於load的效能。

我想了想,還是放到session中把。load是調用fgetcsv得到資料。實際上資料也就400行左右,使用的人也不多,效能還可以。

如果存成k v數組的話,是放到$GLOBALS[]裡面嗎?因為好幾個php檔案都要用。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.