За последние 24 часа нас посетили 8807 программистов и 669 роботов. Сейчас ищут 166 программистов ...

Является ли файл рисунком. Как определить?

Тема в разделе "PHP для новичков", создана пользователем joost, 7 фев 2008.

  1. joost

    joost Guest

    is_file() - определяет является ли обычным файлом.

    а как определить является ли этот файл рисунком?
     
  2. 440Hz

    440Hz Активный пользователь
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    никак
     
  3. joost

    joost Guest

    и что делать?
     
  4. Anonymous

    Anonymous Guest

    ну, теоретически, можно сигнатуры файлов разбирать, но это только теоретически.
     
  5. 440Hz

    440Hz Активный пользователь
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а какая задча?
    =)
     
  6. joost

    joost Guest

    а можно тогда настроить апач так, чтобы если в <img src=file.abra></img> зарание ясно что не будет отображен рисунок, отображался зарание заготовленый с надписю "нет фото"? автоматически подставлялся
     
  7. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    PHP:
    1. $allowed_types = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png');
    2.  
    3. if(!in_array($_FILES['file']['type'], $allowed_types)) die('Ошибка');
    Но это лажа.

    Если порыться в мане, там функции есть по работе с изображениями, если скормить функции неправильную картинку она ругнётся. Где-то я так уже пробовал делать.
     
  8. joost

    joost Guest

    есть список файлов, среди них есть рисунки и не рисунки. перед отображением в броузере надо проверять рисунок или нет?
     
  9. Clone

    Clone Guest

    Не вводите в заблуждение товарища...
    Если getimagesize вернёт false, то файл - не картинка.
     
  10. joost

    joost Guest

    а еще есть im.php?imagefile=181&size=mid
    если запустить дает рисунок . как с этим быть?
     
  11. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Clone
    +1, про это я и писал =)
     
  12. Clone

    Clone Guest

    joost, передай в getimagesize URL файла в полном формате и усё.
    Hight, ну в POST-запросе какой угодно mime-тип можно написать;)
     
  13. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    а я как будто не знаю ;)
     
  14. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Или картинка, но в формате, который не поддерживается.
    Что, в данном случае - тоже годится.
     
  15. nws

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

    С нами с:
    21 авг 2007
    Сообщения:
    48
    Симпатии:
    0
    Код (Text):
    1. function image_valid($type)
    2.     {
    3.         $file_types = array('image/pjpeg' => 'jpg', 'image/jpeg' => 'jpg', 'image/jpeg' =>
    4.             'jpeg', 'image/gif' => 'gif', 'image/X-PNG' => 'png', 'image/PNG' => 'png',
    5.             'image/png' => 'png', 'image/x-png' => 'png', 'image/JPG' => 'jpg', 'image/GIF' =>
    6.             'gif', 'image/bmp' => 'bmp', 'image/bmp' => 'BMP', );
    7.         if (!array_key_exists($type, $file_types))
    8.         {
    9.             return "FALSE";
    10.         }
    11.         else
    12.         {
    13.             return "TRUE";
    14.         }
    15.     }
     
  16. Hight

    Hight Старожил
    Команда форума Модератор

    С нами с:
    5 мар 2006
    Сообщения:
    7.154
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    nws
    А сам $type откуда берёшь?
     
  17. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Во. По сигнатуре:
    PHP:
    1. <?php
    2. function get_image_type($file) {
    3.     if (!$f = fopen($file, 'rb')) {
    4.         return false;
    5.     }
    6.  
    7.     $data = fread($f, 8);
    8.     fclose($f);
    9.  
    10.     if (
    11.         @array_pop(unpack('H12', $data)) == '474946383961' ||
    12.         @array_pop(unpack('H12', $data)) == '474946383761'
    13.     ) {
    14.         return 'GIF';
    15.     } else if (
    16.         @array_pop(unpack('H4', $data)) == 'ffd8'
    17.     ) {
    18.         return 'JPEG';
    19.     } else if (
    20.         @array_pop(unpack('H16', $data)) == '89504e470d0a1a0a'
    21.     ) {
    22.         return 'PNG';
    23.     } else if (
    24.         @array_pop(unpack('H4', $data)) == '424d'
    25.     ) {
    26.         return 'BMP';
    27.     }
    28.  
    29.     return false;
    30. }
    31. ?>
    Естественно никаких гарантий нет.
     
  18. Professor

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

    С нами с:
    2 янв 2008
    Сообщения:
    121
    Симпатии:
    0
    Адрес:
    г. Одесса, Украина
    Не совсем так. getimagesize () возвращает false так же если размер файла превышает допустимый размер для загружаемых файлов, указанный в php.ini. Даже если файл - картинка.
     
  19. Andrey5555

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

    С нами с:
    29 ноя 2007
    Сообщения:
    486
    Симпатии:
    0
    Адрес:
    Киев