Я должен прочитать файл и сделать некоторые вычисления, чем сохранить результат этого вычисления внутри переменной.
Мне просто нужно сделать это один раз. В Java + Servlet я могу сделать это, используя контейнер сервлета и, например, шаблон singleton.
Я знаю, что в PHP я не могу так себя вести. Каков лучший способ сделать это? Сохранить вычисления (или передать данные) в БД?
Нет, он не будет работать с Java Servlets. Вам придется найти обходной путь.
Во-первых, я предполагаю, что использование $ _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 особенно целесообразно, когда
$result
– сложный тип данных, но вы не хотите создавать структуру базы данных и отображать $ result тоже Если вы не находитесь в среде только PHP, вы можете предпочесть другие форматы сериализации как JSON или XML.
Также результат сериализации может быть сохранен как строка в базе данных, а не в файле. Сохранение его в базе данных вместо файла сделает приложение более масштабируемым, так как результат будет доступен для всех серверов, которые обращаются к одной и той же базе данных (кластеру).
Короче: я бы предложил использовать базу данных, возможно, в сочетании с сериализацией.