Правильный способ создания файлов PDF, XLS, PNG в веб-приложении - PullRequest
0 голосов
/ 29 апреля 2011

Мне нужно создать несколько отчетов различных типов файлов (excel, pdf, png) на основе входных данных веб-приложения. Приложение написано на PHP на веб-сервере Apache.

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

1 Ответ

2 голосов
/ 29 апреля 2011

Конечно, это действительно зависит от вашего приложения и вашей системы, но обычно я выполняю задание cron, которое выполняет PHP-скрипт для периодической генерации отчетов. Вывод может быть сохранен в файловой системе или в базе данных. Таким образом, мои отчеты генерируются только один раз (а не каждый раз, когда пользователь пытается их загрузить) И они генерируются только при необходимости (ваш сценарий может проверить, нужно ли ему создавать отчет на основе каких-либо критериев изменения, которые у вас есть, или вы можете просто установите его для периодического создания новых отчетов). Чтобы все было просто, просто вызовите текущую веб-страницу с помощью wget или curl и создайте новую страницу на своем веб-сервере для загрузки сохраненных отчетов.

Единственная проблема этого подхода - пользователи могут загружать «устаревшие» отчеты (данные изменились, но отчеты не были обновлены). Если это действительно проблема, другим подходом будет оставить PHP-скрипт в фоновом режиме, проверяя наличие измененных данных и генерируя отчеты по мере необходимости.

Другой подход заключается в том, что вы можете просто продолжать создавать отчеты, когда пользователи пытаются их загрузить, но кэшировать результаты. Опять же, используя свои собственные критерии для конкретного приложения, вы проверяете, достаточно ли кэшированный отчет для немедленной загрузки, или генерируете новый отчет и кэшируете его. Вы можете даже объединить это с первым подходом, периодически генерируя новые отчеты, но если пользователь пытается загрузить устаревший отчет, немедленно создайте новый (заставив пользователя ждать 3-10 секунд).

В конечном итоге это зависит от вашей системы и вашего приложения.

...