За последние 24 часа нас посетили 17652 программиста и 1673 робота. Сейчас ищут 1500 программистов ...

Определяем тип любого файла...

Тема в разделе "Прочие вопросы по PHP", создана пользователем Robin777, 19 июл 2008.

  1. Robin777

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

    С нами с:
    19 июл 2008
    Сообщения:
    8
    Симпатии:
    0
    Привет всем!
    Пишу код на PHP, который бы работал с определёнными файлами, загружаемыми на сервер через форму в браузере.. так вот, возникла проблема с определением типа файлов. А именно: после загрузки одного и того же файла через разные браузеры, переменная $_FILES['userfile']['type'] имеет разные значение... причём, то, что у IE одно, у FF может быть другим.. короче, в двух словах - сплошной гемморой.. можно ли как-то иным способом определить тип загружаемого на сервер файла? :)
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    по расширению?
     
  3. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Robin777, ты путаешь. У хостера на сервере лежит файл с мимтипами. При загрузке: сервер берёт расширение, открывает файл с типами и по нему ищет расширение. Совпадает - тогда файлу присваивается мимтип.

    Твоя проблема, вероятнее всего, в твоём хостере. Особенно, если это localhost. :)
     
  4. Robin777

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

    С нами с:
    19 июл 2008
    Сообщения:
    8
    Симпатии:
    0
    Эм... если я правильно понял, браузер при загрузке передаёт тип файла серверу, который можно уже получить из $_FILES['userfile']['type']... разве это не так?
     
  5. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Не, браузер читает тип только при скачивании, но не при заливке файла. Тип в $_FILES определяет сервер.

    P.S. Что у тебя за хостер/локальный сервер?
     
  6. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    lexa
     
  7. Robin777

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

    С нами с:
    19 июл 2008
    Сообщения:
    8
    Симпатии:
    0
    У меня виртуальный хостинг.... Славхост (ruskyhost.ru)...
    не понимаю.. настроен верно...
    У кого есть хостинг, попробуйте протестировать в разных браузерах форму загрузки файла и код с "echo $_FILES['userfile']['type']"... уверен, на экране будет выводится разный mime... например, .jpg, загруженный через FF отобразит jpeg, а IE нам выдаст pjpeg...
     
  8. Robin777

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

    С нами с:
    19 июл 2008
    Сообщения:
    8
    Симпатии:
    0
    Sergey89, как же тогда можно определить тип файла, не юзая $_FILES['userfile']['type']?
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    По расширению. Больше никак.
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    вот вот...
    а вот как найти вредоностный JS код в png?
     
  11. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Что касается картинок, то открывать с помощью gd/imagemagick, проверять/ресайзить/обрезать до нужного размера и сохранять в нужном формате.
     
  12. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Действительно. А я на 100% был уверен в обратном.
     
  13. eduha

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

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Можно определить MIME загруженного файла через mime_content_type()
     
  14. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  15. MaEcTPo

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

    С нами с:
    4 июл 2008
    Сообщения:
    11
    Симпатии:
    0
    Скажите, а можно опредилть MIME type картинки не по расширению, а именно открыв и считав с нее хидер? Ведь именно в хидере должна быть информация про файл. Есть какие-то готовые решения по этому поводу.
    Нужно узнать картинка ли это. Если да, то какая - жпг или гиф или пнг или другая.
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    AlexGousev, Не ты не понял, в png картинки можно вставить JS код, тобишь XSS, и при этом картинка будет нормально работать...
     
  17. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Это как? Вообще-то картинка открывается браузером как картинка, пусть хоть там музыка спрятана, тебе все равно будут выводиться пиксели.
    Это через пдф можно XSS сделать, если на сервере недостаточная проверка.
     
  18. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    http://php.net/mime_content_type по сигнатуре определяет
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  20. shurastik

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

    С нами с:
    22 фев 2008
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Латвия
  21. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ему не привыкать =))
     
  22. Robin777

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

    С нами с:
    19 июл 2008
    Сообщения:
    8
    Симпатии:
    0
    Ну я так понимаю, вот как раз это уже и зависит от настроек сервера, так?
    Впринципе, как раз то, что нужно...
     
  23. -FeLiX-

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

    С нами с:
    1 авг 2008
    Сообщения:
    1
    Симпатии:
    0
    можно прочитать первый несколько байт файла. обычно по ним можно однозначно определить тип файла
     
  24. AlexGousev

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

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Я все понял :) Открываешь картинку и сохраняешь с нужными размерами без всякой доп. инфы. Т.е. при загрузке картинку всегда обрабатываешь. Да, теряется качество из-за того, что еще раз сжали.
     
  25. Robin777

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

    С нами с:
    19 июл 2008
    Сообщения:
    8
    Симпатии:
    0
    Странно.. использую mime_content_type()...
    Появляется ошибка: Fatal error: Call to undefined function mime_content_type()
    Что не так??