Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: IMG загрузка

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: Трабла
maragon
Отправлено: 20 Февраля, 2011 - 23:53:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Имеется форма вид:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <form action="my_photos_add.php" method="post">
  2. <input type="file" name="photo_upload">
  3. <input type="submit" name="addphoto" value="Добавить фотографию" class="but">
  4. </form>


Далее обработчик:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. include ("header.php");
  4. if(isset($ses_n)) {  
  5. function resize($photo_src, $width, $name){  
  6. $parametr = getimagesize($photo_src);  
  7. list($width_orig, $height_orig) = getimagesize($photo_src);  
  8.  $ratio_orig = $width_orig/$height_orig;  
  9. $new_width = $width;  
  10.  $new_height = $width / $ratio_orig;  
  11. $newpic = imagecreatetruecolor($new_width, $new_height);  
  12. switch ( $parametr[2] ) {  
  13.  case 1: $image = imagecreatefromgif($photo_src);  
  14.   break;  
  15.   case 2: $image = imagecreatefromjpeg($photo_src);  
  16.   break;  
  17.  case 3: $image = imagecreatefrompng($photo_src);  
  18.   break;  
  19. }  
  20. imagecopyresampled($newpic, $image, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);  
  21. imagejpeg($newpic, $name, 100);  
  22. return true;  
  23. }  
  24. function resize1($photo_src, $width, $name){  
  25. $parametr = getimagesize($photo_src);  
  26. list($width_orig, $height_orig) = getimagesize($photo_src);  
  27.  $ratio_orig = $width_orig/$height_orig;  
  28. $new_width = $width;  
  29.  $new_height = $width / $ratio_orig;  
  30. $newpic = imagecreatetruecolor($new_width, $new_height);  
  31. switch ( $parametr[2] ) {  
  32.  case 1: $image = imagecreatefromgif($photo_src);  
  33.   break;  
  34.   case 2: $image = imagecreatefromjpeg($photo_src);  
  35.   break;  
  36.  case 3: $image = imagecreatefrompng($photo_src);  
  37.   break;  
  38. }  
  39. imagecopyresampled($newpic, $image, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig);  
  40. imagejpeg($newpic, $name, 100);  
  41. return true;  
  42. }  
  43. if (isset($_POST['addphoto']))
  44. {  
  45. $sql = "SELECT `id`
  46.                         FROM `mir_photos`
  47.                 ORDER by id DESC LIMIT 1
  48.         ";
  49. $photo=$db->Query($sql);
  50. $idone = $photo->id;
  51. $id = $idone; //1е фото
  52. $ida = ++$idone;//2е фото
  53. $imgDir = dirname(__photo__) . "/photo/80/"; // каталог для хранения изображений  
  54. $imgDir2 = dirname(__photo__) . "/photo/1000/"; // каталог для хранения изображений  
  55. $data = $_FILES['photo_upload'];  
  56. $tmp = $data['tmp_name'];  //это просто для удобства  
  57. //Проверка2
  58. if ($_FILES['photo_upload']['size'] > 1024 * 3 *1024)
  59. {
  60. echo "<div class='err' style='padding:5px;'><div class='text0'><p>Слишком большой размер изображения!</p></div>";
  61. exit();
  62. }
  63. //Проверка2
  64. $blacklist = array(".php", ".phtml", ".php3", ".php4", ".exe", ".html", ".dhtml");
  65. foreach ($blacklist as $item){
  66. if(preg_match("/$item\$/i", $_FILES["photo_upload"]["name"])){
  67. echo "<div class='err' style='padding:5px;'><div class='text0'><b>ОШИБКА!</b>Проверьте формат загружаемого файла!</div></div>";
  68. }
  69. }
  70. $info = @getimagesize($_FILES['photo_upload']['tmp_name']);
  71. if (preg_match('{image/(.*)}is', $info['mime'], $p))
  72. {  
  73. $newwidth = 80;
  74. $newwidth1 = 1000;
  75. $newnamp = "";
  76. $newname = $imgDir.$id.".".basename($info['mime']);  
  77. $newname1 = $imgDir2.$ida.".".basename($info['mime']);
  78. if(resize($tmp, $newwidth, $newname) and resize1($tmp, $newwidth1, $newname1)){  
  79. $sql = "INSERT INTO `mir_photos`(n,photo,type) VALUES('{$ses_n}','{$newname}','small')";
  80. $res = mysql_query($sql);
  81. $sql = "INSERT INTO `mir_photos`(n,photo,type) VALUES('{$ses_n}','{$newname1}','big')";
  82. $res = mysql_query($sql);
  83. echo "<div class='okgreen' style='padding:3px;'>Изображение было успешно загружено!</div>";  
  84. ?><html><head><meta http-equiv="refresh" content="1;URL=/my_photos.php"></head></html><?
  85. } else { echo "<div class='err'>1 - Произошла ошибка при загрузке изображения&nbsp;</div>"; }  
  86. } else { echo "<div class='err'>2 - Произошла ошибка при загрузке изображения&nbsp;</div>"; }  
  87. } else { echo "Не нажата кнопка загрузки фотографий!"; }  
  88. } else { "Гостям тут не место!"; }
  89. include ("footer.php");
  90. ?>
  91.  

Также имеется 2 каталога 80 \ 1000
---
В итоге светит мне "2 - Произошла ошибка при загрузке изображения", все никак додумать не могу.
- и еще, какие могут быть идеи по распознавании отправляемого файла? (защита)


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 00:10:12
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




maragon, во-первых у формы для отправки файлов на сервер должен быть дополнительный параметр enctype='multipart/form-data'
Файлы можно проверять по расширению ( .jpg .jpeg .png .gif это самые распространённые типы изображений) ну и в дополнение к этому сверять mime типы файлов.
Ну и отключить обработку php в директории в которую будут загружаться картинки. Для этого прописать в .htaccess строку php_flag engine off
Ну и конечно же пользоваться при загрузке функциями is_uploaded_file() и move_uploaded_file()
(Добавление)
maragon пишет:
PHP:
скопировать код в буфер обмена
  1. //Проверка2
  2. $blacklist = array(".php", ".phtml", ".php3", ".php4", ".exe", ".html", ".dhtml");
  3. foreach ($blacklist as $item){
  4. if(preg_match("/$item\$/i", $_FILES["photo_upload"]["name"])){
  5. echo "<div class='err' style='padding:5px;'><div class='text0'><b>ОШИБКА!</b>Проверьте формат загружаемого файла!</div></div>";
  6. }
  7. }

При фильтрации нужно разрешать нужные расширения, а не запрещать всё подряд. И обойтись можно меньшим кодом:
PHP:
скопировать код в буфер обмена
  1. if(preg_match("~^[\w-\.!@]+\.(jpeg|jpg|gif|png)$~i", $_FILE['photo_upload']['name']) == 0) die("ERROR!!!");

(Отредактировано автором: 21 Февраля, 2011 - 00:22:30)

 
 Top
maragon
Отправлено: 21 Февраля, 2011 - 00:26:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Это банальный пример был по защите)) Черный список так сказать.. проще сделать как Вы - белый) Благодарю за помощь.. сразу почему не то не въехал.
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(preg_match("~^[\w-\.!@]+\.(jpeg|jpg|gif|png)$~i", $_FILE['photo_upload']['name']) == 0) die("ERROR!!!");

Не переваривает даже при jpg \ jpeg Однако


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 00:32:24
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




maragon пишет:
Это банальный пример был по защите)) Черный список так сказать..

так почему же вы не включили в свой "чёрный список" JS или же он не представляет для вас большой опасности? Радость
 
 Top
maragon
Отправлено: 21 Февраля, 2011 - 00:36:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Только с кровати встал и начал пистаь по примерам) пока и не заполнян этот биг список)


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 00:38:30
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




maragon пишет:
Не переваривает даже при jpg \ jpeg

регулярка составленна правильно. Она может не сработать только если в имени файла есть кириллица, так как она не расчитана на неё. Можно конечно попробовать привести к 1 типу данные:
PHP:
скопировать код в буфер обмена
  1. if(preg_match("~^[\w-\.!@]+\.(jpeg|jpg|gif|png)$~i", (string)$_FILE['photo_upload']['name']) == 0) die("ERROR!!!");

Если же нужна регулярка пропускающая и кириллицу то вот:
CODE (htmlphp):
скопировать код в буфер обмена
  1. ~^[\wа-яё-\.!@]+\.(jpeg|jpg|gif|png)$~iu

Но нужно тогда задуматься о транслите для русских букв.
 
 Top
OrmaJever Модератор
Отправлено: 21 Февраля, 2011 - 00:43:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Кстате просто распарсить расширение файла мало. Нужно проверить тип.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
maragon
Отправлено: 21 Февраля, 2011 - 00:45:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Примеры есть? Хм


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 00:48:43
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




OrmaJever пишет:
Кстате просто распарсить расширение файла мало. Нужно проверить тип.

Об этом я написал во 2 посте Подмигивание
maragon пишет:
Примеры есть?

примеры чего?
 
 Top
maragon
Отправлено: 21 Февраля, 2011 - 00:51:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




Ваш пример с киррилицой не тянет.
Надо гуглить.. есть понятнее примеры с проверкой на тип)


-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 00:57:15
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




maragon пишет:
Ваш пример с киррилицой не тянет.

Возможно вы что-то не так делаете. Повторюсь ещё раз "регулярка работает"
Скриншот ниже
Прикреплено изображение (Нажмите для увеличения)
регулярка.PNG
 
 Top
maragon
Отправлено: 21 Февраля, 2011 - 01:01:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 340
Дата рег-ции: Февр. 2011  


Помог: 2 раз(а)




if(preg_match("~^[\w-\.!@]+\.(jpeg|jpg|gif|png)$~i", (string)$_FILES['photo_upload']['name']) == 0) die("ERROR!!!");

- походу тут пропус был. Закатив глазки

(Отредактировано автором: 21 Февраля, 2011 - 01:02:24)



-----
https://vk[dot]com/tvoycase_ru - Твой чехол со своим дизайном
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 15:38:52
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




maragon, да, опчатался немного, ну сами понимаете - ночью писал... Улыбка
 
 Top
JustUserR
Отправлено: 21 Февраля, 2011 - 17:52:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




maragon пишет:
Пример с киррилицой не тянет
Для осуществления включения в web-приложения проверочного механихма позволяющего производить верификацию информационных полей включающей региональные элементы необходимо проведения предварительной конфигурации - основанной на осуществлении сопоставления кодовой таблицы и уровня элементного трактования для получаемых объектов - осуществление указанных действий может быть произведно на основе выполнения анализа оригинального входящего HTTP-запроса включающего определения параметров в базовом элементом уровне трактования


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Okula
Отправлено: 21 Февраля, 2011 - 20:17:26
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




JustUserR, так это-то да. Там всё нормально с этим, в регулярке стоит модификатор u позволяющий работать с кодировкой Unicode
Проблемма была в обчной опечатке в имени глобального массива Улыбка
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB