Короче все понятно, готовое решение на чистом Nginx это очень сложно для понимания.
Я решение сравнивал с PIL по скорости, думаю php+GD или php+ImageMagick не сильно будут быстрее того же PIL. Nginx быстрее в раз 10
Но ТС просто не осилит использовать Nginx, зато амбиции авито
Спустя 83 сек.
http {
# Укажите необходимый путь до каталога кеша, имя кеша и максимальный размер кеша
proxy_cache_path <STORAGE_ROOT>/nginx/cache levels=1:2 keys_zone=<CACHE_NAME>:10m max_size=1G;
# Теперь настроим сервер, который будет кешировать результаты
server {
listen 80;
server_name www.example.org;
location ~* ^/(resize|crop)/ {
proxy_pass http://image.example.org$request_uri;
proxy_cache <CACHE_NAME>;
proxy_cache_key "$host$document_uri";
proxy_cache_valid 200 1d;
proxy_cache_valid any 1m;
proxy_cache_use_stale error timeout invalid_header updating;
}
}
# И сервер, который будет выполнять resize и crop
server {
listen 80;
server_name image.example.org;
location ~* ^/resize/([\d\-]+)/([\d\-]+)/(.+)$ {
alias <STORAGE_ROOT>/$3;
image_filter resize $1 $2;
image_filter_buffer 2M;
error_page 415 = /empty;
}
location ~* ^/crop/([\d\-]+)/([\d\-]+)/(.+)$ {
alias <STORAGE_ROOT>/$3;
image_filter crop $1 $2;
image_filter_buffer 2M;
error_page 415 = /empty;
}
location = /empty {
empty_gif;
}
}
}
нет же ))) формируй ссылку на настоящую превьюшку как если бы она существовала.
@artoodetoo, Спасибо за минуты жизни. Но это я понял уже на 2-ой еще странице. Вопрос в другом: Вместо "Спасибо, фото загружено" я хочу вывести саму только что загруженную картинку, там же, в этой же форме, бля, ну как на авито или в Я.Почте когда прикрепляешь файлы (нет, это не значит, что я делаю 2-ой авито или яндекс). Т.е, юзер загрузил.. пошел прогрессбар и как только загрузился вывести положительный результат в виде этой самой картинки. Не потом, когда какой-нибудь хер обратится к этой картинке или странице с картинкой, а сейчас этому же пользователю... фух..
Теперь по поводу nginx. Друзья, с этим зверем никогда дело не имел. Код, который показали в принципе понятен, но не понятно куда именно это вписать и прикрутить, получится ли эти действия в Денвере (если да, то где).
И нужны ли какие-нибудь требования к хостингу?
@master, зато быстро) До переустановки у меня стоял php+apache руками собранный, но щас у меня конкретная задача и ибаться с серверами не предполагал. А тут еще и nginx подсовываете. Нельзя ли то же самое на апаче сделать?
Небольшая эврика! Если делать ресайз не при загрузке, а при выводе, то результат выдается быстрее. Например, гружу 4 фото, ресайз 4-го фото при загрузке завершается за 15 сек. А если только загрузить, а при выводе превьюшек (там же, а не потом где-нибудь на сайте), в таком виде -
Мужуки, сделал как советовали.. короч, установил по человечески апач+пхп (nginx вместо апача не хочу устанавливать, а совместно.. щас не до этого), ресайзю при обращении, а при загрузке миниатюры делаю канвасом (в принципе, главный вопрос в этом и был, как вывести миниатюры сразу же.., ну да хуй с ним).
Такой вопрос, при выводе миниатюр при обращении так:
проверяется есть ли в соответствующей папке файл, если есть вывожу, иначе строю путь и сохраняю. На хабре почитал, что сервер может отдать изображение не обращаясь к скрипту:
для апача такой код
Да, забыл добавить.. на хабре решение практически такое же как и здесь отвечали, тока на нгинксе + еще @artoodetoo похожее выкладывал на апаче, но у меня решение другое - нет отдельного файла куда передаются открыто (мусорить смогут негодяи) параметры и этот файл как-то в конфиге сервера настраивается