| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > получить mime-тип файла |
| Автор: bars80080 4.2.2009, 18:00 |
| хочу получить mime-тип файла mime_content_type($f); почему-то не работает (вызов неизвестной функции) http://www.mediawiki.org/wiki/Manual:Mime_type_detection как я понял надо опереться на http://php.net/manual/en/ref.fileinfo.php , но опять из их описания не понял ровным счётом ничего. там даже нигде не передаётся имя файла собсна, как получить мим-тип? здесь расскажу саму задачу, может кто посоветует иное решение. проблема возникла из сохранения на сервере файлов с русскими именами. однозначно рубить концы и транслитировать не хотелось (попробуй потом объясни каждому менегеру, почему он кладёт файл с одним именем, а получает с другим), а внешний сервак отказался отдавать файлы с кирилицей в имени. там стоит запутанный .htaccess, который видать не видя этот файл (с латиницей всё в порядке) сливает на главную страницу. думал закодировать во что-нибудь, но опять же скачивающий пользователь не получит оригинальное название. решил последнюю меру: считывать файл и отдавать через скрипт readfile (количество скачек будет не очень большое). однако, встал вопрос в правильном определении мим-типа, чтобы отправить соответствующий заголовок. |
| Автор: skyboy 4.2.2009, 18:29 | ||
а смысл? В заголовке content-disposition можно указывать имя скачиваеемого файла, но там только латиницу/цифры/подчеркивание можно применять(т.е. символы из семибитного сегмента кодировки). Добавлено через 1 минуту и 25 секунд да ладно. там даже пример http://www.php.net/manual/en/function.finfo-open.php:
вполне себе передается имя файла. |
| Автор: bars80080 4.2.2009, 18:55 |
| ну, значит у меня не совпадает с этим мануалом восприятие результат: Class 'finfo' not found так что же, никакой вариантов кроме транслита? |
| Автор: ksnk 4.2.2009, 19:31 |
| Дык, а расширение mime подключено? Скорее всего нет. А расширение filenfo ? Видимо тоже... В принципе - mime читает сигнатуры файлов и на основании их делает вывод что за файл. Как правило, все сигнатуры располагаются в первом килобайте файла. При некотором желании можно самому заняться их анализом Список сигнатур и примерный алгоритм их анализа можно взять из файла magic.mime. Файл брать из любого дистрибута PHP... Правда там их дофига, так что лучше выбрать только нужные... |
| Автор: skyboy 4.2.2009, 19:57 |
чтоб вернуть файл динамически через content-Type + content-disposition: attachement - нет, больше нет. правда, некоторые браузеры вполне принимают utf-имя файла(проверять - проверял, но какие браузеры - точно уже не скажу). потому если, скажем, ориентироваться только на opera, то можно и без транслита использовать. значит, не подключено расширение. хостер позволяет редактировать php.ini? |
| Автор: skyboy 4.2.2009, 23:25 |
| собственно, нарыл довольно подробный(но неизвестно, насколько актуальный) http://www.jtricks.com/bits/content_disposition.html использования content-disposition: attachment в разных браузерах. |
| Автор: bars80080 5.2.2009, 12:54 | ||
| ну вот, а я уже было пал духом. всё нормально прокатило в ИЕ6, ИЕ7, ФФ3 и опера 9.50 примерно в таком виде:
файлы сохраняются с нормальными русскими именами. осталось только попробовать, можно ли использовать кавычки в имени (') остался такой вопрос: readfile насколько сильно напрягает сервер? я так понимаю, что не мало систем работает в таком духе, но всё же хотелось бы узнать |