[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ПРоблемы с загрузкой изображений
Ramzil_Nixon
У меня error_reporting ругается на
($_FILES['userfile']['name']


Точнее на userfile

Что за фигня это?

Цитата
Notice: Undefined index: userfile in C:\VertrigoServ\www\data\skripts\uploadava.php on line 9




Спустя 18 минут, 32 секунды (22.12.2011 - 09:32) phz написал(а):
Покажи полностью код. Может
if (!empty($_FILES['userfile']['name']))

Спустя 1 минута, 27 секунд (22.12.2011 - 09:34) sergeiss написал(а):
Форму покажи, где данные вводишь. У тебя там в инпуте именно userfile написано?

Спустя 52 секунды (22.12.2011 - 09:34) Ramzil_Nixon написал(а):
sergeiss, тьфу балин! biggrin.gif Как мне это в голову не пришло smile.gif

Спустя 13 минут, 27 секунд (22.12.2011 - 09:48) Ramzil_Nixon написал(а):
А вот как сделать чтобы при хагрузке имя файла меняла свое название, знаю что в в ['name'] нужно менять. Но не знаю каким образом

Спустя 3 минуты, 33 секунды (22.12.2011 - 09:51) phz написал(а):
Переим. файл при загрузке. Добавь к примеру time():

    $uploaddir = 'files/';
$uploadfile = $uploaddir.time().basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile) == FALSE)
{
echo 'Ошибка загрузки файла';
} else {
echo 'Удачно загружен!';
}

Спустя 6 минут, 10 секунд (22.12.2011 - 09:58) Ramzil_Nixon написал(а):
phz, спасибо. держи свой заслуженный +

Спустя 10 секунд (22.12.2011 - 09:58) killer8080 написал(а):
Ramzil_Nixon
не забывай фильтровать по расширению, мало ли что тебе загрузят wink.gif

Спустя 3 минуты, 13 секунд (22.12.2011 - 10:01) Ramzil_Nixon написал(а):
killer8080
вот :)

$rasreschenie = array('.jpg',
'.jpeg',
'.gif',
'.png'); // Список разрешенных разрешений

Спустя 51 секунда (22.12.2011 - 10:02) phz написал(а):
Если будешь грузить только изобр. можно проверять так:

 $imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
echo "бе бе бе и т.д...";
exit;
}

Спустя 2 минуты, 13 секунд (22.12.2011 - 10:04) Ramzil_Nixon написал(а):
phz

Этот способ защиты можно обойти, так как проверяемый MIME-тип приходит вместе с запросом. Злоумышленник сможет установить его в image/gif при помощью эмуляции HTTP-клиента.

Спустя 4 минуты, 10 секунд (22.12.2011 - 10:08) killer8080 написал(а):
например так
$rasreschenie = array('jpg', 'jpeg', 'gif', 'png');
$ext = strtolower(pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION));
if(in_array($ext, $rasreschenie)){
move_uploaded_file(); // перемещаем файл
}

Спустя 2 минуты, 32 секунды (22.12.2011 - 10:11) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 09:04)
Этот способ защиты можно обойти, так как проверяемый MIME-тип приходит вместе с запросом.

нет, getimagesize сама определят майм тип, но контролировать расширение все равно нужно.

Спустя 1 минута, 50 секунд (22.12.2011 - 10:13) phz написал(а):
Вот интересная статья на эту тему http://habrahabr.ru/blogs/php/44610/

Спустя 38 минут, 8 секунд (22.12.2011 - 10:51) Ramzil_Nixon написал(а):
ну с этим разберусь позже. А вот как обрезать область 100 на 100? а то мой скрипт:

$message = ''; // Для вывода сообщений
if(isset($_POST['GoAvka']))
{
$rasreschenie = array('.jpg',
'.jpeg',
'.gif',
'.png'); // Список разрешенных разрешений
if(in_array(strrchr($_FILES['Avkas']['name'], '.'), $rasreschenie))
{
$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/avatars/'; // Директория сохранения изображения
$uploadfile = $uploaddir.time().'.jpg'; // готовим изображение к загрузке
$savefile = time().'.jpg'; // Для записи в БД
if(move_uploaded_file($_FILES['Avkas']['tmp_name'], $uploadfile)) // Загружаем изображение
{
$img_x = 150;
$img_y = 150;
$temp = imagecreatetruecolor($img_x, $img_y); // Создаем пустое изображение
$new_image = imagecreatefromjpeg($uploadfile); // Создаем JPEG файл
$imagedata = getimagesize($uploadfile); // Размер, различная информация
imagecopyresampled($temp, $new_image, 0, 0, 0, 0, $img_x, $img_y, $imagedata[0], $imagedata[1]); // Копируем изображение на другое
if(imagejpeg($temp, $uploadfile, 100)) // Записываем ссылку на страницу пользователя
{
mysql_query("UPDATE `user_site` SET
`photo` = '"
.mysql_real_escape_string($savefile)."' WHERE
`id` = '"
.(int)$_SESSION['id']."'
"
) or die(mysql_error()); // Обновляем запись
$message .= '<span id="ComleteSpan">Успешно загружено</span>';

}
else
{
$message .= '<span id="ErrorSpan">Ошибка загрузки изображения</span>';
}

}

else
{
$message .= '<span id="ErrorSpan">Ошибка загрузки изображения</span>';
}
}

else
{
$message .= '<span id="ErrorSpan">Разрешеннные форматы: JPG, JPEG, GIF, PNG</span>';
}
}

Спустя 19 минут, 47 секунд (22.12.2011 - 11:10) killer8080 написал(а):
Ramzil_Nixon
нужно учитывать пропорции, а то картинка будет искаженной.

Вот когда делал подобное, адаптируй под свои нужды
Свернутый текст
function img_resize($src, $dest, $max_side, $quality = 75, &$error, $logo = false){
global $CONFIG;
if(!file_exists($src)){
$error= "file_not_exist";
return false;
}

$size = getimagesize($src);
if(!$size){
$error= "getimagesize_failure";
return false;
}

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.

$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));

// определяем функцию преобразования в соотвествии с форматом
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)){
$error= "not_supported_format";
return false;
}

// ширина и высота выходного фото
$width= $size[0] >= $size[1] ? $max_side : floor($max_side * ($size[0] / $size[1]));
$height= $size[0] <= $size[1] ? $max_side : floor($max_side * ($size[1] / $size[0]));

if(!$i_src = @$icfunc($src)){
$error= "corrupted_file";
return false;
}
$i_dest = imagecreatetruecolor($width, $height);

imagecopyresampled($i_dest, $i_src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);

// накладываем логотип, если нужно
if($logo){
if(strpos($logo, home_dir) !== 0){
$logo= home_dir.ltrim($logo, "/");
}
if(!file_exists($logo)){
$error= "logo_file_not_exist";
return false;
}
$logo_size= getimagesize($logo);
$logo_width= floor($width / $CONFIG['logo_ratio']);
$logo_height= floor($logo_width * ($logo_size[1] / $logo_size[0]));
$logo= imagecreatefrompng($logo);
$posX= floor($width - $logo_width - ($width / 20));
$posY= floor($height - $logo_height - ($height / 20));
imagecopyresampled($i_dest, $logo, $posX, $posY, 0, 0, $logo_width, $logo_height, $logo_size[0], $logo_size[1]);
}

$img= imagejpeg($i_dest, $dest, $quality);
if($img){
if(file_exists($dest)) chmod($dest, 0775);
$error= false;
return true;
}
else{
$error= "imagejpeg_failure";
return false;
}

imagedestroy($i_src);
imagedestroy($i_dest);
}

Спустя 4 минуты, 37 секунд (22.12.2011 - 11:15) Ramzil_Nixon написал(а):
killer8080, надо бы, но я этот обработчик собираюсь впустить в пользоваине обычным пользователям smile.gif у них уж в голову придет разные чудеса. Например 200 * 500 надо вырезать кусок из этого размером 150 * 200 например. вот так вот, сжать не надо просто вырезать надо миниатюру

Спустя 3 минуты, 58 секунд (22.12.2011 - 11:19) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:15)
сжать не надо просто вырезать надо миниатюру

а то что кусок картинки будет потерян ничего? А если юзер загрузит 10 мегапикселную фотку, что от неё останется smile.gif

Спустя 3 минуты, 55 секунд (22.12.2011 - 11:23) Ramzil_Nixon написал(а):
killer8080, пробовал загрузить 50 на 50 пиксельную картинку, скрипт подогнал на 150 и 150 biggrin.gif Офигел просто! smile.gif Одидал что загрузить изобрадение собствтвенного размера

Спустя 1 минута, 15 секунд (22.12.2011 - 11:24) Ramzil_Nixon написал(а):
Цитата (killer8080 @ 22.12.2011 - 08:19)
А если юзер загрузит 10 мегапикселную фотку, что от неё останется

в таком случае нужно загрузить собственный размер smile.gif

Спустя 45 секунд (22.12.2011 - 11:25) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:23)
killer8080, пробовал загрузить 50 на 50 пиксельную картинку, скрипт подогнал на 150 и 150

ну так и должно было случится smile.gif

Спустя 1 минута, 6 секунд (22.12.2011 - 11:26) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:24)
в таком случае нужно загрузить собственный размер

не понял задачу, тебе же нужно разрешение картинки менять, или что?

Спустя 10 минут, 6 секунд (22.12.2011 - 11:36) Ramzil_Nixon написал(а):
killer8080,
Цитата (killer8080 @ 22.12.2011 - 08:26)
не понял задачу, тебе же нужно разрешение картинки менять, или что?

Ты правильно все понял. Напишу более подробно. Не обязательно получить фото с разрешением 150 на 150. А просто если ширина изобрадения больше 150 то нужно его подогнать на 150, ну а если меньше то оставить так же, ничего не менять. Теперь понятнее? smile.gif

Спустя 4 минуты, 7 секунд (22.12.2011 - 11:40) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:36)
Напишу более подробно. Не обязательно получить фото с разрешением 150 на 150. А просто если ширина изобрадения больше 150 то нужно его подогнать на 150, ну а если меньше то оставить так же, ничего не менять. Теперь понятнее?

ну так та функция что я привел выше, как раз это и делает. smile.gif
Только подкорректируй чтоб не ресайзила, если размер меньше 150 пикселей.

Спустя 3 минуты, 55 секунд (22.12.2011 - 11:44) Ramzil_Nixon написал(а):
Цитата (killer8080 @ 22.12.2011 - 08:40)
ну так та функция что я привел выше, как раз это и делает. 


На первое время выну из функции smile.gif с функциями у меня пока отношения не очень smile.gif

Цитата (killer8080 @ 22.12.2011 - 08:40)
Только подкорректируй чтоб не ресайзила, если размер меньше 150 пикселей.


Думаю это особого труда не составить smile.gif

Спустя 3 минуты, 7 секунд (22.12.2011 - 11:47) killer8080 написал(а):
Ramzil_Nixon
держи
/**
*
@param string $src - файл, который ресайзим
*
@param string $dest - куда сохраняем
*
@param int $max_side - размер максимальной стороны в пикселях
*
@param int $quality - качество сохраняемой картинки, по умолчанию 75%
*
@param string - ссылка на переменную, где будет сообщение об ошибке
*
@return bool - возвращает true при успешном сохранении файла
*/

function img_resize($src, $dest, $max_side, $quality = 75, &$error){

// проверяем существует ли исходный файл
if(!file_exists($src)){
$error = "file_not_exist";
return false;
}

$size = getimagesize($src);
// проверяем является ли файл изображением
if(!$size){
$error = "getimagesize_failure";
return false;
}

// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.

$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));

// определяем функцию преобразования в соответствии с форматом
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)){
$error= "not_supported_format";
return false;
}

// ширина и высота выходного фото
if(max($size[0], $size[1]) > $max_side){ //если картинка большая, пересчитываем размер
$width = $size[0] >= $size[1] ? $max_side : floor($max_side * ($size[0] / $size[1]));
$height = $size[0] <= $size[1] ? $max_side : floor($max_side * ($size[1] / $size[0]));
}
else{ // если картинка маленькая, оставляем размер без изменений
$width = $size[0];
$height = $size[1];
}

// проверяем не поврежден ли исходный файл
if(!$i_src = @$icfunc($src)){
$error = "corrupted_file";
return false;
}
$i_dest = imagecreatetruecolor($width, $height);

imagecopyresampled($i_dest, $i_src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);

$img = imagejpeg($i_dest, $dest, $quality);
if($img){
// если файл создан, изменяем права доступа, чтоб можно было удалять из под юзера по FTP
// а не только под правами апача

if(file_exists($dest)) chmod($dest, 0775);
$error= false;
return true;
}
else{
$error= "imagejpeg_failure";
return false;
}

// освобождаем память
imagedestroy($i_src);
imagedestroy($i_dest);
}

Спустя 29 минут, 51 секунда (22.12.2011 - 12:17) Ramzil_Nixon написал(а):
killer8080
Щас испробуем smile.gif

Спустя 34 минуты, 48 секунд (22.12.2011 - 12:52) Ramzil_Nixon написал(а):
Работу с меньшими пикселями чем указанные разобрался, теперь асталось сжать изображение в случае если больше указанного smile.gif

Спустя 29 минут, 35 секунд (22.12.2011 - 13:22) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 11:52)
теперь асталось сжать изображение в случае если больше указанного

так функция сама определяет, нужно ресайзить, или нет. smile.gif

Спустя 55 минут, 46 секунд (22.12.2011 - 14:17) Ramzil_Nixon написал(а):
Цитата (killer8080 @ 22.12.2011 - 08:47)
$max_side


Можно подробнее об этом? чет затупил в этом

Спустя 10 минут, 35 секунд (22.12.2011 - 14:28) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 22.12.2011 - 13:17)
$max_side



Можно подробнее об этом? чет затупил в этом

картинка может как горизонтальной, так и вертикальной ориентации. Скрипт сам определяет большую сторону, и относительно неё делает ресайз, сохраняя ориентацию и пропорции исходной картинки.

Спустя 1 минута, 28 секунд (22.12.2011 - 14:29) Ramzil_Nixon написал(а):
killer8080, эта переменная приходит из стороны в функцию, вот это и избило меня из пути smile.gif


_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.