За последние 24 часа нас посетили 20794 программиста и 1107 роботов. Сейчас ищут 419 программистов ...

Зависает браузер при проверке размера изображения

Тема в разделе "Обработка изображений средствами PHP", создана пользователем Johnson, 3 янв 2011.

  1. Johnson

    Johnson Активный пользователь

    С нами с:
    14 мар 2009
    Сообщения:
    36
    Симпатии:
    0
    Завоздка! Почему-то при проверке размера картинки, а именно:
    Код (Text):
    1. if ($File['size'] > $MaxSize) {
    2.     $Error = "Слишком большой файл";
    3.     return false;
    4.   }
    браузер перестает реагировать, зависает!

    И работа его возобновляется только после перезагрузки компьютера.

    А почему - непонятно! Может у кого была подобная ситуация?

    Поделитесь опытом!
     
  2. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    в $File['size'] значения как берутся? Покажи код как читает..
     
  3. Johnson

    Johnson Активный пользователь

    С нами с:
    14 мар 2009
    Сообщения:
    36
    Симпатии:
    0
    Хочу уточнить в какой момент происходит зависание браузера!
    А именно:
    а) при вызове функции внутри базового класса;
    б) при выборе фото выше нормативного размера в 1 Мб.

    Если залить эти функции и форму в отдельный файл всё работает!

    вызов функции
    Код (Text):
    1. $fsmall = check_and_load_foto($_FILES['picture'],$sm_name,'1');
    Две функции. Одна из них для проверки и закачки картинки, а вторая для стандартизации размера фото

    Вот первая:
    Код (Text):
    1.  
    2. function check_and_load_foto($file, $newname, $type = 1, $quality = null)
    3.  {
    4.     // Массив допустимых значений типа файла
    5.     $types = array('image/gif', 'image/jpeg','image/jpg');
    6.     // Обработка запроса
    7.     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    8.         // Проверяем тип файла
    9.         if (!in_array($file['type'], $types))
    10.         die('<p>Запрещённый тип файла. <a href="'.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].'">Попробовать другой файл?</a></p>');
    11.  
    12.         // Проверяем размер файла
    13.         if ($file['size'] > MAX_SIZE)
    14.         die('<p>Слишком большой размер файла. <a href="'.$_SERVER["PHP_SELF"].'?'.$_SERVER["QUERY_STRING"].'">Попробовать другой файл?</a></p>');
    15.  
    16.         $name_file = resize_pict($file,$newname, $type);
    17.    
    18.         // Загрузка файла и вывод сообщения
    19.         if (!@copy(ABS_TEMP . $name_file, ABS_PATH . $name_file))
    20.             $result = 0; // Что-то пошло не так.
    21.         else {
    22.             $result =1;
    23. //          echo '<p>Загрузка прошла удачно <a href="' . PATH . $name_file . '">Посмотреть</a>.</p>';
    24. //          print('<img src="' . PATH . $name_file . '">');
    25.         }
    26.         // Удаляем временный файл
    27.         unlink(ABS_TEMP . $name_file);
    28.         if($result>0) return $name_file;
    29.         else return(0);
    30.     }          
    31.  }
    Вот вторая
    Код (Text):
    1.  
    2. // Функция изменения размера
    3. // $file - передается массив значений $_FILES['name']
    4. // $newname - Новое имя файла
    5. // Изменяет размер изображения в зависимости от type:
    6. //  type = 1 - эскиз
    7. //  type = 2 - большое изображение
    8. //  quality - качество изображения (по умолчанию 75%)
    9. function resize_pict($file, $newname, $type = 1, $quality = null)
    10.  {
    11.     // В зависимости от типа (эскиз или большое изображение) устанавливаем ограничение по ширине.
    12.     if ($type == 1) $w = MAX_SMALL_FILESIZE;
    13.     elseif ($type == 2) $w = MAX_BIG_FILESIZE;
    14.    
    15.     // Качество изображения по умолчанию
    16.     if ($quality == null) $quality = 75;
    17.  
    18.     switch($file['type']):
    19.         case "image/jpeg" : { $source = imagecreatefromjpeg($file['tmp_name']);  break; }
    20.         case "image/jpg" : { $source = imagecreatefrompng($file['tmp_name']);  break; }
    21.         case "image/gif" : { $source = imagecreatefromgif($file['tmp_name']);  break; }
    22.         default: return false;
    23.     endswitch;
    24.  
    25.     // Определяем ширину и высоту изображения
    26.     $w_src = imagesx($source); // Определяем его линейный размер по горизонтали (ширина)
    27.     $h_src = imagesy($source); // Определяем его линейный размер по вертикали (высота)
    28.  
    29.  
    30.  
    31.     if ($w_src != $w) { // Проверяем не равна ли уже исходная ширина необходимой нам
    32.         if ($w_src > $h_src) { // Если изображение горизонтальное
    33.             $ratio = $w_src/$w; // Считаем соотношение пропорций
    34.             $w_dest = $w; // Конечная ширина будет равна максимальной
    35.             $h_dest = round($h_src/$ratio); // Считаем конечную высоту
    36.         } elseif ($h_src > $w_src) { // Если изображение вертикальное
    37.             $ratio = $h_src/$w; // Считаем соотношение пропорций
    38.             $h_dest = $w; // Конечная высота будет равна максимальной
    39.             $w_dest = round($w_src/$ratio); // Считаем конечную ширину
    40.         } else { // Если изображение квадратное
    41.             $w_dest = $w; // Подставляем максимальные значения
    42.             $h_dest = $w;
    43.         }
    44.     }
    45.    
    46.     $dest = imagecreatetruecolor($w_dest, $h_dest);
    47.        
    48.     imagecopyresampled($dest, $source, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
    49.     imagejpeg($dest, ABS_TEMP . $newname, $quality);
    50.    
    51.     imagedestroy($dest);
    52.     imagedestroy($source);
    53.     return $newname;
    54.  }
    и форма для загрузки, самая простая
    Код (Text):
    1.  
    2. <form action="<?=$_SERVER["PHP_SELF"];?>" method="post" enctype="multipart/form-data">
    3. <input type="file" name="picture">
    4. <input type="submit" value="Загрузить">
    5. </form>
     
  4. Johnson

    Johnson Активный пользователь

    С нами с:
    14 мар 2009
    Сообщения:
    36
    Симпатии:
    0
    не ужели никто не знает?
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    профи обосрались
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Это всё php, он злобный! Разъярённый ударом слишком тяжёлой картинкой (да прямо по голове) он в ответ отправил какое-то ругательство типа
    HTML:
    1. <script type="text/javascript">
    2. while(true) { }
     
  7. Johnson

    Johnson Активный пользователь

    С нами с:
    14 мар 2009
    Сообщения:
    36
    Симпатии:
    0
    с этим вопросом всё ясно! следующий вопрос такой.

    Может кто-нибудь объяснить такую штуку:
    Почему в IE при определении типа файла
    Код (Text):
    1. $_FILES['picture']['type']
    выдается ответ image/pjpeg

    Причем в Opera определяется правильно - image/jpeg

    откуда берется буква "p"?
     
  8. Johnson

    Johnson Активный пользователь

    С нами с:
    14 мар 2009
    Сообщения:
    36
    Симпатии:
    0
    понятно! я тоже не знаю.
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    У ie:
    jpg - pjpg
    png - x-png