За последние 24 часа нас посетили 16223 программиста и 1666 роботов. Сейчас ищут 943 программиста ...

Проверка файла, картинка это или нет

Тема в разделе "PHP для новичков", создана пользователем Magnum, 23 июл 2016.

  1. Magnum

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

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    1. Появился ещё один вопрос по поводу загрузки файлов
      Дело обстоит так: я загружаю до 4 файлов, файлы загружаются ко мне, переименовуются, и их имя сохраняется в бд. Потом при выводе с базы, я уже проверяю, картинка это или нет. Если картинка - то вывожу через теги <img>, а если нет, то хочу чтобы оно размещалось внизу страницы. Определяю, картинка это или нет с помощью этого кода. Но проблема в том, что расширение то выводится правильно, только вот, всё равно условие не срабатывает, и выводилось как и раньше - всё без разбора. В чём тут может быть проблема?

      PHP:
      1. <?php while($img = $res_img -> fetch_assoc()): ?>
      2.         <?php echo pathinfo('files/'.$img['name'], PATHINFO_EXTENSION) ?>
      3.         <?php if (pathinfo('files/'.$img['name'], PATHINFO_EXTENSION) == 'gif' || 'png' || 'jpg' || 'bmp'): ?>
      4.             <a href="files/<?php echo $img['name'] ?>"><img src="files/<?php echo $img['name'] ?>" style="max-height: 100px; max-width: 100px;"></a>
      5.         <?php else: ?>
      6.             тут живет другой файл по имени - <?php echo $img['name'] ?>
      7.         <?php endif ?>
      8.              
      9.     <?php endwhile; ?>
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Где вопрос?
    --- Добавлено ---
    Если чо, pathinfo не проверяет картинка ли это. Он только вырезает из имени файла его расширение. Ты можешь переименовать .php в .jpg, он от этого картинкой не станет.
     
  3. Magnum

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

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    намудрил с редактированием(
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Ошибка в твоей конструкции
    $x == a || b || c
    это работает не так, как ты думаешь )))
    --- Добавлено ---
    http://php.net/in_array
     
    Magnum нравится это.
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    посмотри вот эту функцию - imagecreatefrompng, она возвращает false если это не рисунок, но иногда она тупит выдает картинку, как не картинку.
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    А если jpeg будет? getimagesize() вернее, несмотря на уязвимость
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    imagecreatefromjpeg
    imagecreatefromgif
    пускай роет.
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    imagecreatefromstring + file_get_contents

    Дисклаймер: большинство типов изображений невозможно определить с помощью GD (фотошоп, например, поддерживает около 20).
     
  9. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Fileinfo
    PHP:
    1. <?php
    2. $allowed_types = [
    3.     'image/gif',
    4.     'image/jpeg',
    5.     'image/png',
    6.     /* и т.д. */
    7. ];
    8. $finfo = finfo_open(FILEINFO_MIME_TYPE);
    9. $mime = finfo_file($finfo, 'path/to/your/file.ext');
    10. if (in_array($mime, $allowed_types)) {
    11.     // Заходи
    12. } else {
    13.     // В сад
    14. }
     
    VLK и igordata нравится это.
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.