将文件加载到PHP数组中,最好的方法?

时间:2010-08-19 17:42:02

标签: php file session

我有一个大约1.7MB的文本文件,其中包含我的应用程序所需的单词列表。我需要在页面加载时将其加载到数组中,然后将其用于发出AJAX请求的其他PHP文件。现在我将它加载到页面加载的数组中,然后将其存储在一个会话中,以便AJAX文件在发出请求时可以使用它。这是最好的方法吗?

3 个答案:

答案 0 :(得分:4)

真的取决于您对数据的处理方式。如果AJAX只需要来自该巨大列表中的某些单词,那么它最好存储在数据库中。

请记住,即使列表存储在会话中,也会暗示您在每次调用时脚本都会加载该数组。对于可能之类的东西来说,接缝似乎并不是真正需要的。

但是,你并没有给我们太多细节。

答案 1 :(得分:1)

如果必须将整个数组加载到PHP中,我会编写一个脚本,使其成为包含单词列表的数组定义的PHP脚本,因此您将拥有一个包含以下内容的.php文件: / p>

$myArray = array('blah', 'blah', 'blah'); //etc

然后,我会包含那个(require_once)...大多数PHP脚本引擎都能够很容易地优化它...在将它存储在会话中没多大意义,只会占用更多的磁盘空间/数据库用于存储的空间/存储器。

答案 2 :(得分:0)

file命令非常快,所以我确信通过缓存任何东西都会有很多好处。

您是否在每个页面加载时使用数据?如果没有,请不要使用会话,因为即使您不需要它也会有加载它的开销。

数据是否取决于用户?如果没有,请不要使用会话,因为您将无缘无故地复制整个数据。

如果您正在进行更复杂的解析,那么我建议使用

缓存该文件
file_put_contents($filename, '<?php return '.var_export($array, true).';');

然后,您需要做的只是$data = include $filename来获取数据......

你甚至可以让它足够智能来检测变化:

function getData() {
    static $data = array();
    if (empty($data)) {
        $cache = '/path/to/cache/file';
        $full = '/path/to/original/file';
        if (!file_exists($cache) || filemtime($cache) < filemtime($full)) {
            $data = parseDataFileIntoArray($full);
            $code = '<?php return '.var_export($data, true).';';
            file_put_contents($cache, $code);
        } else {
            $data = include $cache;
        }
    }
    return $data;
}