PHP: постоянное значение переменной

php static

4401 просмотра

1 ответ

Я должен прочитать файл и сделать некоторые вычисления, а затем сохранить результат этого вычисления в переменной.

Мне просто нужно сделать это один раз. В Java + Servlet я могу сделать это, используя контейнер сервлета и, например, шаблон синглтона.

Я знаю, что в PHP я не могу так себя вести. Какой лучший способ сделать это? Сохранить вычисления (или перенести данные) в БД?

Автор: Antonio Источник Размещён: 12.11.2019 09:48

Ответы (1)


9 плюса

Решение

Нет, это не будет работать как с сервлетами Java. Вам придется найти обходной путь.

Во-первых, я предполагаю, что использование $ _SESSION, $ _COOKIE или $ _REQUEST в общем случае нецелесообразно для вас, так как вы хотите сохранить состояние для каждого сервера (или для каждого приложения), а не для «пользовательской сессии».

Использование базы данных звучит практически осуществимо в вашем случае. В обычном дизайне приложения это будет наиболее распространенное решение.

Также вы можете сделать что-то вроде этого, используя возможности сериализации PHP:

<?php

$resultfile = 'result.dat';
if(!file_exists($resultfile)) {
    $result = compute_result('foo bar');
    file_put_contents($resultfile, serialize($result));
} else {
    $result = unserialize(file_get_contents($resultfile));
}

Использование serialize()попытки PHP особенно целесообразно, когда

  • Вы находитесь в среде только PHP
  • $result это сложный тип данных, но вы не хотите создавать структуру базы данных и отображать $ result тоже

Если вы находитесь не только в среде PHP, вы можете предпочесть другие форматы сериализации, такие как JSON или XML.

Также результат сериализации может быть сохранен в виде строки в базе данных вместо файла. Сохранение его в базе данных вместо файла сделало бы приложение более масштабируемым, поскольку в результате это было бы доступно для всех серверов, которые обращаются к одной и той же базе данных (кластеру).

Вкратце: я бы предложил использовать базу данных в сочетании с сериализацией.

Автор: hek2mgl Размещён: 28.12.2012 09:05
Вопросы из категории :
32x32