Мой скрипт php анализирует профиль пользователя на другом сайте, берет некоторую информацию и генерирует изображение .png с ним для определенного пользователя (script.php? Username =). Каждый раз, когда страница с этими изображениями загружается, сценарий запускается снова и снова. Как я могу кэшировать изображения и запускать сценарий снова, если информация, которую он выводит, была изменена? Это сэкономит массу ресурсов.Кэширование динамического изображения, сгенерированного на php
ответ
Вам нужно будет разобрать профиль пользователя снова на каждый запрос, чтобы узнать, если что-то изменилось.
Затем вы можете выбросить всю информацию в какой-либо хеш, например md5($name.$location)
, и хранить эту информацию в любом месте. Если теперь вы получите запрос на изображение, проанализируйте профиль пользователя, снова создайте хеш и посмотрите этот хеш. Если вы сохранили его, вы ранее создали изображение и можете просто его вывести. Если хэш отличается, информация пользователя также изменилась, и вам придется воссоздать изображение.
Вы также можете применить эвристику, например, тот факт, что пользователь может изменять свой профиль только один раз в час или даже один раз в день. С помощью этого предположения вы можете сравнить дату создания изображения пользователя и только проанализировать информацию пользователя, если изображение старше часа (или дня).
Это хорошая идея хранить изображения в течение 24 часов (например) и обновлять их по истечении времени. Думаю, я пойду так, для меня не так важно иметь изменения в реальном времени. Благодаря! – Madi
установить заголовки PHP, чтобы сообщить браузеру, что кэшируется ресурс:
header("Last-Modified: " . date("D, d M Y H:i:s", getlastmod()));
здесь, вы можете найти, как вы можете кэшировать изображения с помощью PHP. Вы можете вызвать этот скрипт, когда найдете обновление из базы данных, иначе каждый раз изображение будет загружаться из кеша.
// put this above any php image generation code:
session_start();
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
https://dtbaker.net/blog/web-development/2009/06/how-to-cache-images-generated-by-php/
Здравствуйте, не могли бы вы обновить свою ссылку? Тот, который вы опубликовали, теперь мертв. –
@LorenzMeyer Обновлено. – Milap
Кэширование изображений, вероятно, является самой простой проблемой кэширования, поскольку это просто вопрос сохранения локальной копии любого изображения на ваш сервер после его создания и проверки локальной копии перед запуском кода, который ее генерирует.
Что-то вроде: -
if(file_exists(image12345.png && !checkIfDataChanged()){
serve cached file;
} else {
generate new file;
save new file to image12345.png;
serve cached file;
}
Этот псевдо-код конечно, но он должен быть достаточно легким для вас, чтобы перевести его в PHP.
Процитировать OP 'Как я могу кэшировать изображения и снова запускать скрипт, если информация, которую он выводит, была изменена?'. Информация пользователя будет меняться со временем, чтобы изображения были повторно созданы. – Basti
@Basti О да, отредактирован. В вашем решении будет использоваться хэш как имя файла? – vascowhite
Возможно, да. Но вы не могли бы больше сопоставить имя пользователя с его изображением без предварительного анализа его профиля. – Basti
Кэш изображения на диск и пусть Apache позаботится об остальном.
Во-первых, повторить свой образ URI, таким образом они похожи на:
<img src="/images/profiles/johnsmith.png" />
Затем в /images/profiles/
, поместите .htaccess
файл:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.png$ /script.php?username=$1 [QSA,L]
</IfModule>
Затем ваш сценарий написать результирующее png на диск перед подачей его пользователю. В следующий раз, когда изображение будет запрошено, он получит его непосредственно с веб-сервера.
Когда информация о профиле пользователя изменяется, просто удалите существующий .png-файл с сервера, и ваш скрипт будет запущен при следующем обращении к изображению.
Если вы не хотите, чтобы веб-сервер мог писать в корневом каталоге сети, пишите вне него и выполняйте задание cron.
блестящий! Это решение отлично работает! –
- 1. Гобелен динамического сгенерированного изображения
- 2. Кэширование динамического изображения GD
- 3. Отображение php сгенерированного изображения на странице
- 4. Наложение php-сгенерированного изображения на другое изображение
- 5. PHP gd thumbnail сгенерированного изображения
- 6. Кэширование Изображения, сгенерированные PHP-скриптом
- 7. NodeJS - Кэширование динамического ответа
- 8. Загрузка динамического изображения PHP
- 9. Захват сгенерированного динамического содержимого на стороне сервера
- 10. Использование динамического сгенерированного изображенияjpeg - Альтернатива FORM POST
- 11. Поиск источника сгенерированного динамического SQL
- 12. Возвращает URL сгенерированного изображения в PHP
- 13. Создание загрузки динамического изображения PHP
- 14. Кэширование/Хранение токена LTPA, сгенерированного в datapower
- 15. Загрузка динамического изображения Phaser/PHP
- 16. Сохранение PIL сгенерированного PNG изображения на сервере с PHP
- 17. Экспорт сгенерированного изображения PHP на форум формата postable
- 18. PHP для получения содержимого файла динамического сгенерированного файла
- 19. Ошибка сгенерированного изображения
- 20. Сохранение сгенерированного изображения на Matlab Gui
- 21. Получение сгенерированного изображения для отображения на сайте
- 22. Воспроизведение звука из динамического сгенерированного списка
- 23. Кэширование динамически загруженные изображения
- 24. Кэширование старого изображения
- 25. Возможное кэширование php на Netsons
- 26. Добавление динамического HTML, сгенерированного jQuery на HTML-страницу
- 27. Получить текст динамического сгенерированного TextView при нажатии на него
- 28. PHP/JavaScript для динамического изменения путей изображения
- 29. Кэширование растрового изображения
- 30. Вызов избранного изображения из сгенерированного эскиза
Извините, что сказал это сейчас, но я полный ноб, и я не понимаю многих вещей, которые вы мне рассказываете. Спасибо за информацию, хотя, надеюсь, Google сделает сейчас. У меня также есть nginx, а не apache, поэтому .htaccess не будет работать, или я ошибаюсь? – Madi
Судя по большинству ответов, я думаю, вы хотите расширить часть воссоздания изображения, если информация пользователя изменилась. Ваш вопрос неправильно понят только для обозначения простой механики кэширования изображений. – Basti
Итак, я решил воссоздать образ, только когда прошло 24 часа после последнего творения. Спасибо всем пользователям за помощь! – Madi