Я бы сделал это по-другому.
Проблемы:
1. Использование PHP-файлов менее эффективно, чем могло бы быть.
2. PHP должен проверять наличие файлов каждый раз, когда запрашивается изображение
3. Apache намного лучше, чем PHP когда-либо будет.
Здесь есть несколько решений.
Вы можете использовать mod_rewrite
на Apache. Можно использовать mod_rewrite, чтобы проверить, существует ли файл, и если да, то использовать его вместо этого. Это полностью обходит PHP и делает вещи намного быстрее. Реальный способ сделать это, однако, состоит в том, чтобы сгенерировать определенную схему URL, которая должна существовать всегда, а затем перенаправить на PHP, если нет.
Например:
RewriteCond %{REQUEST_URI} ^/images/cached/
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule (.*) /images/generate.php?$1 [L]
Поэтому, если клиент запрашивает /images/cached/<something>
, а этот файл еще не существует, Apache перенаправит запрос на /images/generate.php?/images/cached/<something>
. Этот сценарий может затем сгенерировать изображение, записать его в кэш и затем отправить его клиенту. В будущем сценарий PHP никогда не будет вызываться, за исключением новых изображений.
Использовать кеширование. Как сказал другой автор, используйте такие вещи, как mod_expires
, последние измененные заголовки и т. Д., Чтобы отвечать на условные запросы GET. Если клиенту не нужно повторно запрашивать изображения, загрузка страниц резко возрастет, а нагрузка на сервер уменьшится.
В случаях, когда вам нужно отправить изображение из PHP, вы можете использовать mod_xsendfile
, чтобы сделать это с меньшими накладными расходами. См. отличный пост в блоге от Арнольда Дэниелса по этому вопросу, но обратите внимание, что его пример предназначен для загрузки. Чтобы встроить изображения, извлеките заголовок Content-Disposition (третий вызов header ()).
Надеюсь, это поможет - больше после того, как моя мигрень прояснится.