exotica
25.06.2013 - 11:43
Доброго времени суток!. Решил что просто текст выглядит не очень презентабельно, и решил добавить пользователям аватарки.
Логику процесса представил себе так:- Есть форма загрузки фото-файла
- Пользователь загружает фотографию со своего ПК
- Скрипт проверяет соответсвие расширению .jpeg / .jpg / .png , если не одно из трех, возвращает ошибку и форму. Если все ок, продолжаем.
- Сжимаем фото сохраняя пропорции чтобы оно не выходило за параметры 1024x720 px
- Сохраняем оригинальное изображение в каталог uploads, и сохраняем ссылку на него в БД
- Сжимаем фотографию сохраняя пропорции, для корректного отображения на странице пользователя, и сохраняем путь в БД.
- Далее при авторизации заношу 2 Путь в $_SESSION['avatar'] и он отображается на странице как фото. А 1 Путь записываю в $_SESSION['avatar_full'] и он будет подгружен при нажатии на картинку пользователя, будет показан полный масштаб.
Вот как то так я себе представляю. Скажите если серьезную ошибку допускаю где либо.
_____________
[FAQ]Регистрации пользователей, сохранение в БД---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
DedMorozzz
25.06.2013 - 12:02
Цитата |
Скрипт проверяет соответсвие расширению .jpeg / .jpg / .png , если не одно из трех, возвращает ошибку и форму. Если все ок, продолжаем.
|
А что если тут будет не картинка? А просто файл с расширением png? Проверяй ещё на "картинку"
Цитата |
Сохраняем оригинальное изображение в каталог uploads, и сохраняем ссылку на него в БД |
тут пару моментов. Во первых - зачем 2 раза пережимать, у тебя пережим дважды делается
И файл необходимо переименовать.
Так же разные размеры файла лучше хранить просто в разных папках, с одинаковым названием исходного файла. И в БД хранить лишь название
А папки с аватарками будут вида: /img/(original/big/medium/small)/image_name.png
ну или big,small ... назвать как 200, 75... тут как уж удобнее
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
exotica
25.06.2013 - 12:13
Цитата |
Во первых - зачем 2 раза пережимать, у тебя пережим дважды делается |
А вдруг пользователь загрузит 2500х1800 px ?? Как вариант сделать будет сделать такую папку?:
user_pic- original
- normal
- ava
- small
То есть в original сохраняется собственно оригинал загруженный пользователем, В normal загружается 1000х700 (урезка), в ava будет то что на аватарку, и в small пойдет мини-изображение
Т.е фото урежется 3 раза
_____________
[FAQ]Регистрации пользователей, сохранение в БД---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
DedMorozzz
25.06.2013 - 12:35
Цитата (exotica @ 25.06.2013 - 11:13) |
Т.е фото урежется 3 раза |
ну да. Всё верно. Сколько размеров авок надо, на столько размеров и резать.
Что касаемо 2х раз пережимаешь, это я написал к тому, что у тебя в алгоритме это в 2х разных местах.
Т.е. пункт пережимаем, далее что-то делаем, после этого - ещё раз пережимаем.
именно это смутило, зачем вызывать 2 раза. На одном этапе сделать все нужные размеры и больше к этому не возвращаться
Цитата |
А вдруг пользователь загрузит 2500х1800 px ?? Как вариант сделать будет сделать такую папку? |
Если беспокоишься о месте - ограничь максимальный вес. И это таки надо всё равно сделать. Хотя бы 5 мб. Ибо загрузят те снимок со спутника, размером в несколько гигов...
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
exotica
25.06.2013 - 12:56
Ок про ограничение веса понял, спасибо.
т.е- Загружаем фото, проверяем расширение, тип и максимальный "вес"
- Сжимаем сразу во все нужные размеры
- Сохраняем с одним именем в разные каталоги.
Такс, тогда сразу возникает вопросик, нужно же сгенерировать имя, уникальное для каждой загруженной фотографии. Признаюсь сразу - еще не гуглил на эту тему, но спрошу, мало ли есть материал в запасе)
_____________
[FAQ]Регистрации пользователей, сохранение в БД---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
DedMorozzz
25.06.2013 - 13:22
имя...да рандомная строка + время. Но сам понимаешь, вариантов может быть масса.
К примеру я использую именно время+строка. В случае если в 1 сек добавили несколько юзеров 1 фотку
Цитата (exotica @ 25.06.2013 - 11:56) |
Загружаем фото, проверяем расширение, тип и максимальный "вес" |
повторюсь, а если там расширение png, но там будет не картинка?
Т.е. aaa.exe.png
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
exotica
25.06.2013 - 13:43
Цитата |
повторюсь, а если там расширение png, но там будет не картинка? Т.е. aaa.exe.png |
а как это мы можем проверить?? в голову влез только preg_match может есть другие варианты? или регулярка самый подходящий?
_____________
[FAQ]Регистрации пользователей, сохранение в БД---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
DedMorozzz
25.06.2013 - 13:51
А каким образом ты проверишь регуляркой, картинка ли это?
Необходимо проверять не название файла, а тип файла.
А проверить можно по разному, но к примеру так
http://www.php.net/manual/en/function.getimagesize.php
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Splaer
25.06.2013 - 14:04
$_FILES['uploadfile']['type']
проверить на соответствие с image/gif, image/png, image/jpeg
Правда, насколько я знаю, с точки зрения безопасности это не лучший вариант.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.