В настоящее время у меня есть функция в PHP под названием img(), которая принимает как минимум два аргумента:
print img("foo.jpg", 100);
Это вернет что-то вроде этого:
<img src='/cache/foo_XXXXX.jpg' width='100' height='76' />
Итак, функция принимает аргументы, изменяет размер исходного файла и сохраняет его как кешированный файл на сервере и возвращает тег изображения. Очевидно, что если кешированная версия уже существует, он просто возвращает ее и сохраняет обработку для следующего раза.
Теперь это отлично работает в 99 случаях из 100, но для некоторых сайтов есть страницы, которые довольно загружены изображениями, и, поскольку срок действия кэшированных версий изображения истекает через X дней, функциям img() необходимо воссоздать 50+ изображений высокого разрешения в маленькие миниатюры, а загрузка такой страницы занимает несколько секунд, а это неприемлемо.
Поэтому моя идея состоит в том, чтобы отделить это. Итак, делаем это:
print img("foo.jpg", 100);
вернет это:
<img src='img.php?ARGUMENTS' width='?' height='?' />
Это означает, что функция img() на самом деле вообще не обрабатывает файл, а выводит HTML, который сообщает браузеру, что нужно получить изображение из скрипта PHP, а не из файла статического изображения на сервере.
Теперь часть «ARGUMENT», конечно же, будет содержать всю информацию, которая необходима img.php для работы с файлом так же, как img() — возможно, сериализованную строковую версию всех аргументов функции?
Но проблема в значениях ширины/высоты тега изображения! Поскольку обработка вынесена за рамки текущего скрипта, он понятия не имеет, насколько большим будет результирующее изображение, верно? Я, очевидно, не могу дождаться завершения img.php и вернуть его. Я использую imagemagick для обработки (поэтому второй аргумент может быть 100, «50%», «‹40» и еще много чего), и, возможно, есть способ «пробного запуска» его с помощью imagemagick, т. е. чтобы imagemagick возвращал результирующий размер определенный файл с помощью определенной команды?
Как бы вы решили это?