Перейдем к делу.
Мне надо сделать загрузку скриншотов от пользователя. Но они должны быть ограниченного размера – 640×480 (это обязательный размер, изображение растягивается или сжимается если не влезает, если не те пропорции – добавляется кайма). И тут я сталкиваюсь с проблемой.
Я не знаю, как это осуществить. Просто загрузку для меня сделать реально, но как сделать все эти операции с изображением (обрезание, растягиваение, кайма и тд) и заменить старый файл на сервере? Через GD как делать – не знаю как сохранить полученное изображение. Помогите, пожалуйста.
29 марта 2010 в 22:03
№22 … Ну вот… а мы тут распинались ))))
№24
>> //www.php.net/manual/en/
Видимо, это еще рано предлагать. Сначала //www.php.ru/manual/
29 марта 2010 в 21:02
спасибо за ссылки, но возник вопрос
что это вообще за массив $FILES?
29 марта 2010 в 21:02
и еще вопрос. move_uploaded_file работает асинхронно или нет?
29 марта 2010 в 21:02
Не понял. Ты же писал, что в состоянии загрузить файл?
Вообще, название массива соответствует тому, для чего он предназначен.
> move_uploaded_file работает асинхронно или нет?
А в PHP вообще что-нибудь асинхронно работает?
Короче, вот тебе необходимый и достаточный набор ссылок:
//www.php.net/manual/en/
//www.google.ru/
Освой это для начала, а потом уже вопросы задавай.
29 марта 2010 в 21:00
2 Александр:
Кстати, была статья на хабре про безопасную загрузку изображений. Там, в общем-то, все описано.
//habrahabr.ru/blogs/php/44610/
//habrahabr.ru/blogs/php/44615/
P.S. Тема 100 раз изъезжанная вдоль и поперек, так что учись гуглить.
29 марта 2010 в 21:00
а разве get_image_size работает с файлами на компе клиента?
29 марта 2010 в 21:00
ступил.
29 марта 2010 в 20:05
#11
Подключи диалап и проверь )
#12
Да, протупил. Удаляется.
29 марта 2010 в 20:05
№10
upload_max_filesize для объемных файлов, которые "сожрут" диск и трафик, а для Вашего изображения добавить еще проверку imagesx|sy
29 марта 2010 в 20:05
> при обнаружении
а как мне обнаружить это проклятье?
29 марта 2010 в 20:05
upload_max_filesize как бы по умолчанию не должен превосходить 2мб, если конечно сервер конфигурировал не дятел.
imagesx/sy работает уже с созданным ресурсом изображения, т.е. оно будет загружено в память. Где логика?
Пользоваться надо getimagesize, тем более эта функция в состав GD не входит.
29 марта 2010 в 20:05
#15
//ru.php.net/getimagesize
29 марта 2010 в 20:05
#16 >>get_image_size
А, да! Теперь я протупил )))
29 марта 2010 в 20:04
хм. а есть ли другой способ обойти эту дыру?
29 марта 2010 в 20:04
Есть какие-то расширения для работы с изображениями на стороне клиента, но это не кроссбраузерно.
А так, flash-ем можно.
29 марта 2010 в 20:04
К вопросу №3
php.ini
параметр upload_max_filesize
29 марта 2010 в 20:04
> и тогда будет поздно.
Что поздно? Прекращай работу скрипта при обнаружении такой загрузки, не забыв удалить ее из tmp.
29 марта 2010 в 20:04
> параметр upload_max_filesize
Денис, я вам сделаю пустое изображение размером 100500×100500 такое, которое будет занимать меньше, чем ваш upload_max_filesize
29 марта 2010 в 20:04
ни флэш, ни яву не знаю.
кстати, см. старый загрузчик фотографий вконтакте – сомневаюсь, что там фотография сначала полностью на серв загружается.
29 марта 2010 в 20:04
>>не забыв удалить ее из tmp.
файл сам удалится из tmp по окончании работы скрипта
29 марта 2010 в 20:03
и еще проблемка – как загрузить в GD изображение, не загружая изображение на сервер? а то пользователь может загрузить изображение размером 100500×100500, и тогда будет поздно.
29 марта 2010 в 20:03
Для изменения размера:
//ru2.php.net/manual/en/function.imagecopyresiz...
Для копирования части:
//ru2.php.net/manual/en/function.imagecopy.php
Для сохранения в любом популярном формате:
//ru2.php.net/manual/en/function.imagejpeg.php
//ru2.php.net/manual/en/function.imagepng.php
//ru2.php.net/manual/en/function.imagegif.php
29 марта 2010 в 20:03
> _загрузить_ в GD изображение, _не загружая_ изображение на сервер
Противоречивость мыслей чувствуешь?
Если работать только с php – никак.
29 марта 2010 в 20:02
Тфу ты, забыл выразить саму проблему. Я знаю, как в GD сохранить изображение, но ее средствами, насколько я понял, можно сохранить лишь в формат WBMP. а надо JPEG или еще лучше – PNG.