Здравствуйте, уважаемые программисты. Пишу сайт, который не предполагает кеширование своего содержимого на стороне клиента. За исключением папки /img, в которой хранятся "украшательства" сайта: jpg, gif, png, etc. Прошу подсказать, правильно ли я это реализовал. Или есть другие варианты? .htaccess в папке img: Код (PHP): Options +FollowSymLinks DirectoryIndex index.php Action throw /img/index.php <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)$ img/index.php?$1 </IfModule> /img/index.php: Код (PHP): <?php error_reporting(0); $par = explode('/', $_SERVER['QUERY_STRING']); if ($par[0]) { $file = getcwd() . '/' . $par[0]; if (file_exists($file)) { header('Cache-Control: public'); list($usec, $sec) = explode(' ', microtime()); $sec += 24 * 60 * 60; // устаревает через 1 день $expireDate = gmdate('D, d M Y H:i:s', $sec) . ' GMT'; header('Expires: $expireDate'); echo file_get_contents($file); } } ?> PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
ты не проверяешь путь к запрошенному файлу. Ты его строишь, но его можно прислать и вида /../../../../ и тп. и выбраться из твоей папки. К тому же нафига тебе getcwd() если ты точно знаешь, где файлы ДОЛЖНЫ быть.
Пробовал somesite.com/img/../some_file.php - /img/index.php не срабатывает, браузер автоматически переходит на указанный файл в корне. На всякий подправил разбивку строки: Код (PHP): $par = explode('/', str_replace('/..', '', $_SERVER['QUERY_STRING'])); С getcwd() - да, перемудрил, просто взял за основу другой свой скрипт, которым пользуюсь довольно давно. С другой стороны, данный механизм можно перекинуть и на другую папку, особо не правя исходник. А "пыхом" (ужас какой) картинки решил отдавать, так как вот таким образом мне привиделась возможность кеширования файлов в конкретной папке. Потому и просил совета у знатоков, кто что лучше может предложить. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Коль сказали "а", так и "б" уж говорите. Почему не надо то? Дабы пхп-сервер не нагружать? Ну, я не новый ВКонтакте пишу, особо крупного наплыва посетителей не намечается. У меня тут еще одна мысль возникла. Создать поддомен типа i.somesite.com, в панели управления хостингом выставить ему "принудительное" кеширование и все картинки на сайт тянуть через него. Видел, часто так делают. Насколько я понял - именно для этой цели. Что скажете?
кешировать нужно то, что меняется. Картинки и так уже файлы. Что вообще ты называешь кешировать? Сохранять к себе? Это не называется "кешировать".
Кешированием я называю это: страница на вскидку. И, кстати, там я нашел ответ на свой вопрос без "костылей" на пхп - под Apache: Код (PHP): <FilesMatch "\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz| gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$"> Header set Cache-Control "max-age=2592000, must-revalidate" </FilesMatch> - кеш указанных файлов на один месяц. Думаю, самое то. Спасибо за участие. PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color][size=85][color=green]Добавлено спустя 15 минут 13 секунд:[/color][/size][b]2 denis01[/b]: извините, на других форумах привык просто code в квадратных скобках писать. Кстати, указанный выше код у меня не заработал, апач вернул ошибку. Вот так получилось: [code=php]<FilesMatch "\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico| zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$"> ExpiresDefault "access plus 1 month" </FilesMatch> Между ico| и zip| переноса строки быть не должно.