【问题标题】:Load file into PHP array, best way?将文件加载到 PHP 数组中,最好的方法是什么?
【发布时间】:2023-03-22 16:00:04
【问题描述】:

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

【问题讨论】:

  • 为什么不在页面加载时将其加载到数组中?为什么要把它放到会话中?你真的需要在每次页面加载时使用所有这些词吗?
  • 我想知道的是,如果我将文件加载到 AJAX 请求所在的 PHP 文件中的数组中,是否会在每次请求时将文件加载到数组中。

标签: php file session


【解决方案1】:

实际上取决于您对数据的处理方式。如果 AJAX 只需要这个庞大列表中的某些单词,那么最好将其存储在数据库中。

请记住,即使列表存储在会话中,这也意味着您的脚本会在每次调用时加载该数组。对于也许并不真正需要的东西来说,接缝就像是一个巨大的负担。

不过,你没有给我们太多细节。

【讨论】:

  • 你可以花时间执行 sql 查询,而不是在整个 1.7MB 的单词中循环
  • 为了更清楚一点,该数组将有接近 200,000 个元素(字)。 AJAX 请求基本上是检查给定的单词是否在数组中。
  • @Brandon 毫不犹豫地将其放入数据库。使用更少的资源(更少的内存),您将获得性能(搜索速度)的提升。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    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;
    }
    

    【讨论】:

    • 想解释一下否决票?假设整个数组必须在 PHP 领域(不使用 DB),这是一个相当不错的设计。它避免了任何序列化的页面加载时的双重内存使用问题。它可在所有服务器上使用(因为它不需要 PECL 扩展即可工作)。如果您安装了一个 OPCode 缓存,它将充分利用 OPCode 缓存(无需更改功能)...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多