Загрузить файл в массив PHP, лучший способ? - PullRequest
2 голосов
/ 19 августа 2010

У меня есть текстовый файл размером около 1,7 МБ со списком слов, которые мне нужны для моего приложения.Мне нужно, чтобы он загружался в массив при загрузке страницы, а затем был доступен для других файлов PHP, к которым были сделаны запросы AJAX.Прямо сейчас я загружаю его в массив при загрузке страницы, а затем сохраняю его в сеансе, чтобы файл AJAX имел его в наличии при выполнении запросов к нему.Это лучший способ сделать это?

Ответы [ 3 ]

4 голосов
/ 19 августа 2010

Действительно зависит от того, что вы делаете с данными. Если AJAX требуется только определенная пара слов из этого огромного списка, его, вероятно, лучше всего хранить в базе данных.

Помните, что даже если список сохраняется в сеансе, это будет означать, что ваш скрипт загружает этот массив при каждом отдельном вызове. Швы, как огромная ноша для чего-то, что возможно действительно не нужно.

Вы не даете нам подробностей.

1 голос
/ 19 августа 2010

Если весь массив должен быть загружен в PHP, я бы написал скрипт, который превратил его в скрипт PHP, который содержит определение массива списка слов, поэтому у вас будет файл .php, содержащий:

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

Затем я бы включил это (require_once) ... большинство движков PHP-скриптов смогут довольно легко оптимизировать это ... не так уж много смысла хранить его в сеансе, просто израсходоватьбольше дискового пространства / БД / памяти для хранения.

0 голосов
/ 19 августа 2010

Команда 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;
}
...