如何只加载一次文件到变量中

php中文网
发布: 2016-06-23 14:02:07
原创
994人浏览过

应用场景是这样子的:
我有一个csv的文件,包含一些key-value的映射关系,一般情况下是不变的。
好几个不同的界面都需要使用这个文件中的数据,所以我想一次性加载,其它界面调用就行了。

我使用单例模式和_GLOBALS都不能保证load一次,每次刷新界面都load一次。

请问如何处理?


回复讨论(解决方案)

php是短连接,一次性加载然后读取不好做

存入session或者cookie中

写个方法读取csv文件内容,单例模式调用,不可行?

存入session或者cookie中

这个应该可以。

写个方法读取csv文件内容,单例模式调用,不可行?

我使用单例模式读取的数据放到了一个static变量里面。
但每次还是要load。

要load是什么意思?

要load是什么意思?

我设置了一个static的count变量,每次调用load_file的时候就打印一下。

在两个不同的界面上,
都打印
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.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文件都要用。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号