($_FILES['userfile']['name']
Точнее на userfile
Что за фигня это?
($_FILES['userfile']['name']
Цитата |
Notice: Undefined index: userfile in C:\VertrigoServ\www\data\skripts\uploadava.php on line 9 |
if (!empty($_FILES['userfile']['name']))
$uploaddir = 'files/';
$uploadfile = $uploaddir.time().basename($_FILES['userfile']['name']);
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile) == FALSE)
{
echo 'Ошибка загрузки файла';
} else {
echo 'Удачно загружен!';
}
$rasreschenie = array('.jpg',
'.jpeg',
'.gif',
'.png'); // Список разрешенных разрешений
$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg') {
echo "бе бе бе и т.д...";
exit;
}
$rasreschenie = array('jpg', 'jpeg', 'gif', 'png');
$ext = strtolower(pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION));
if(in_array($ext, $rasreschenie)){
move_uploaded_file(); // перемещаем файл
}
Цитата (Ramzil_Nixon @ 22.12.2011 - 09:04) |
Этот способ защиты можно обойти, так как проверяемый MIME-тип приходит вместе с запросом. |
$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>';
}
}
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);
}
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:15) |
сжать не надо просто вырезать надо миниатюру |
Цитата (killer8080 @ 22.12.2011 - 08:19) |
А если юзер загрузит 10 мегапикселную фотку, что от неё останется |
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:23) |
killer8080, пробовал загрузить 50 на 50 пиксельную картинку, скрипт подогнал на 150 и 150 |
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:24) |
в таком случае нужно загрузить собственный размер |
Цитата (killer8080 @ 22.12.2011 - 08:26) |
не понял задачу, тебе же нужно разрешение картинки менять, или что? |
Цитата (Ramzil_Nixon @ 22.12.2011 - 10:36) |
Напишу более подробно. Не обязательно получить фото с разрешением 150 на 150. А просто если ширина изобрадения больше 150 то нужно его подогнать на 150, ну а если меньше то оставить так же, ничего не менять. Теперь понятнее? |
Цитата (killer8080 @ 22.12.2011 - 08:40) |
ну так та функция что я привел выше, как раз это и делает. |
Цитата (killer8080 @ 22.12.2011 - 08:40) |
Только подкорректируй чтоб не ресайзила, если размер меньше 150 пикселей. |
/**
* @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);
}
Цитата (Ramzil_Nixon @ 22.12.2011 - 11:52) |
теперь асталось сжать изображение в случае если больше указанного |
Цитата (killer8080 @ 22.12.2011 - 08:47) |
$max_side |
Цитата (Ramzil_Nixon @ 22.12.2011 - 13:17) |
$max_side Можно подробнее об этом? чет затупил в этом |