1. PHP / Говнокод #4716

    +161

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    $extentions = array('1','2','3','6'); # определяем типы разрешенных файлов
    $Filedatasize = $_FILES['Filedata']['size']; 
    $width = 200; # Максимальная ширина миниатюры
    $height = 160;	# Максимальная высота миниатюры
    $file_type = exif_imagetype($_FILES['Filedata']['tmp_name']); # определяем тип файла
    if (in_array($file_type, $extentions) && ($maxfilesize >= $Filedatasize)){
    	switch ($file_type) {
    		case '2': $file_type = '.jpg'; break;
    		case '3': $file_type = '.png'; break;
    		case '1': $file_type = '.gif'; break;			
    		case '6': $file_type = '.bmp'; break;
    	}
    	if ($_POST['select_catalog'] > 0){
    		mysql_query("INSERT INTO `images` (`id_catalog`) VALUES ('".$_POST['select_catalog']."');") or die("MySQL Error: " . mysql_error());
    	} else {
    		 mysql_query("INSERT INTO `images` (`image_title`) VALUES (' ');") or die("MySQL Error: " . mysql_error());
    	}
    	$image_id = mysql_insert_id();
    	mysql_query("UPDATE `images` SET `image_name_d` = '".$image_id.$file_type."', `image_name_s` = '".$image_id."_m".$file_type."' WHERE `images`.`id_images` = ".$image_id.";") or die("MySQL Error: " . mysql_error());
    	$image_mini = $image_id.'_m'.$file_type;
    	$image_normal = $image_id.$file_type;
    	
    	$ext = $file_type; # Получаем формат уменьшаемого изображения
    	list($width_orig, $height_orig) = getimagesize($_FILES['Filedata']['tmp_name']); # получаем размеры изображения
    	
    	#высчитываем 
    	$ratio_orig = $width_orig/$height_orig;		
    	if ($width/$height > $ratio_orig) {
    		$width = $height*$ratio_orig;
    	} else {
    		$height = $width/$ratio_orig;
    	}
    	$image_p = imagecreatetruecolor($width, $height);
    	switch ($ext) {
    		case '.jpg': $source = imagecreatefromjpeg($_FILES['Filedata']['tmp_name']); break;
    		case '.gif': $source = imagecreatefromgif($_FILES['Filedata']['tmp_name']); break;
    		case '.png': $source = imagecreatefrompng($_FILES['Filedata']['tmp_name']); break;			
    		case '.bmp': $source = imagecreatefromwbmp($_FILES['Filedata']['tmp_name']); break;
    	}
    	imagecopyresampled($image_p, $source, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
    	switch ($ext) {
    		case '.jpg': imagejpeg($image_p, 'gallery/'.$image_mini, 100); break;                
    		case '.gif': imagegif($image_p, 'gallery/'.$image_mini);  break;                
    		case '.png': imagepng($image_p, 'gallery/'.$image_mini); break;                
    		case '.bmp': imagewbmp($image_p, 'gallery/'.$image_mini); break;
    	}
    	
    	# освобождаем память
    	imagedestroy($image_p);
    	imagedestroy($source);	
    	if (($width_orig >= 1600) or ($height_orig >= 1200)) {
    		$width = 1600; # Максимальная ширина
    		$height = 1200;	# Максимальная высота
    		$ratio_orig = $width_orig/$height_orig;		
    		if ($width/$height > $ratio_orig) {
    			$width = $height*$ratio_orig;
    		} else {
    			$height = $width/$ratio_orig;
    		}
    		$image_p = imagecreatetruecolor($width, $height);
    		switch ($ext) {
    			case '.jpg': $source = imagecreatefromjpeg($_FILES['Filedata']['tmp_name']); break;
    			case '.gif': $source = imagecreatefromgif($_FILES['Filedata']['tmp_name']); break;
    			case '.png': $source = imagecreatefrompng($_FILES['Filedata']['tmp_name']); break;			
    			case '.bmp': $source = imagecreatefromwbmp($_FILES['Filedata']['tmp_name']); break;
    			}
    		imagecopyresampled($image_p, $source, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
    			switch ($ext) {
    				case '.jpg': imagejpeg($image_p, 'gallery/'.$image_normal, 100); break;                
    				case '.gif': imagegif($image_p, 'gallery/'.$image_normal);  break;                
    				case '.png': imagepng($image_p, 'gallery/'.$image_normal); break;                
    				case '.bmp': imagewbmp($image_p, 'gallery/'.$image_normal); break;
    			}
    		
    		# освобождаем память
    		imagedestroy($image_p);
    		imagedestroy($source);
    			
    	} else {
    		move_uploaded_file($_FILES['Filedata']['tmp_name'], 'gallery/'.$image_normal);
    	}
    }	
    chmod('gallery/' . $image_normal, 0777);
    $return['src'] = 'gallery/' . $image_normal;

    Запостил: ZekMan, 23 Ноября 2010

    Комментарии (22) RSS

    • Пардон... а разве GD работает с bmp?
      Ответить
    • Узнаю свой почерк 2-3 летней давности
      Ответить
    • дырка для XSS
      mysql_query("INSERT INTO `images` (`id_catalog`) VALUES ('".$_POST['select_catalog']."');") or die("MySQL Error: " . mysql_error());
      Ответить
      • > для SQL-инъекции
        ftfy
        Ответить
        • да прогнал конечно же SQL.
          Ответить
          • Как я понял надо проверять $_POST['select_catalog'] перед вставкой в запрос, это так?
            Ответить
            • mysql_real_escape_string
              Ответить
              • как бы в php.ini опция "магические кавычки" стоит, тоже самое делает
                Ответить
                • на одном серваке стоит на другом нет. Я бы её вообще удалил с ней только путаница лишняя
                  Ответить
    • тип картинки нельзя определять по расширению.
      imagejpeg с качеством 100, это жестоко...

      Следующее вообще порвало на куски:
      INSERT INTO `images` (`image_title`) VALUES (' ');
      Ответить
      • Ну а как бы ты сделал? нужно добавить в бд, узнать id что бы присвоить картинке имя....
        Ответить
        • сначала присвоить имя, затем занести в бд (поле соотв. быть должно бы)
          ID пусть остаётся как AI
          Ответить
      • 5 строчка exif_imagetype, по подписи проверяю а не по расширению
        Ответить
    • $Filedatasize, $file_type - определитесь со стилем обзывания переменных
      array('1','2','3','6'); - ну добавьте пробелы после запятых, читать приятнее будет.

      строки 34-39 и 62-65. очень явный повтор кода. да и вобще раскидайте свой код примерно на 3-4 функции, избавьтесь от повторов (не только 100% одинакового кода, но и от похожего) и будет счастье.
      Ответить
    • все обсуждают sql инъкцию, и никого не колышыт что SQL запросы и бизнес-логика и работа с HTTP у нас в одном мега-файле))

      пых)
      Ответить
      • Ну это уже классика. Этим не удивишь И пых тут не причем.
        Ответить
      • угу )
        зачем загружать много раз много маленьких файлов, если можно загрузить один раз один, в котором все уже есть ))))))))
        Ответить
      • а еще можно в базу все сложить и разметку и текст и код
        Ответить

    Добавить комментарий