Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить mime-тип файла 
V
    Опции темы
bars80080
Дата 4.2.2009, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



хочу получить mime-тип файла

mime_content_type($f); почему-то не работает (вызов неизвестной функции)
отсюда как я понял надо опереться на Fileinfo Functions , но опять из их описания не понял ровным счётом ничего. там даже нигде не передаётся имя файла

собсна, как получить мим-тип?





здесь расскажу саму задачу, может кто посоветует иное решение.
проблема возникла из сохранения на сервере файлов с русскими именами. однозначно рубить концы и транслитировать не хотелось (попробуй потом объясни каждому менегеру, почему он кладёт файл с одним именем, а получает с другим), а внешний сервак отказался отдавать файлы с кирилицей в имени. там стоит запутанный .htaccess, который видать не видя этот файл (с латиницей всё в порядке) сливает на главную страницу.
думал закодировать во что-нибудь, но опять же скачивающий пользователь не получит оригинальное название. решил последнюю меру: считывать файл и отдавать через скрипт readfile (количество скачек будет не очень большое). однако, встал вопрос в правильном определении мим-типа, чтобы отправить соответствующий заголовок.

Это сообщение отредактировал(а) bars80080 - 4.2.2009, 18:04
PM MAIL WWW   Вверх
skyboy
Дата 4.2.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(bars80080 @  4.2.2009,  17:00 Найти цитируемый пост)
и отдавать через скрипт readfile

а смысл? В заголовке content-disposition можно указывать имя скачиваеемого файла, но там только латиницу/цифры/подчеркивание можно применять(т.е. символы из семибитного сегмента кодировки).

Добавлено через 1 минуту и 25 секунд
Цитата(bars80080 @  4.2.2009,  17:00 Найти цитируемый пост)
там даже нигде не передаётся имя файла

да ладно. там даже пример имеется:
Код

$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic"); // return mime type ala mimetype extension

if (!$finfo) {
    echo "Opening fileinfo database failed";
    exit();
}

/* get mime-type for a specific file */
$filename = "/usr/local/something.txt";
echo $finfo->file($filename);

/* close connection */
$finfo->close();

вполне себе передается имя файла.
PM MAIL   Вверх
bars80080
Дата 4.2.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну, значит у меня не совпадает с этим мануалом восприятие

результат:

Class 'finfo' not found 





так что же, никакой вариантов кроме транслита?
PM MAIL WWW   Вверх
ksnk
Дата 4.2.2009, 19:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Дык, а расширение mime подключено? Скорее всего нет. А расширение filenfo ? Видимо тоже...

В принципе - mime читает сигнатуры файлов и на основании их делает вывод что за файл. Как правило, все сигнатуры располагаются в первом килобайте файла. При некотором желании можно самому заняться их анализом  smile 

Список сигнатур и примерный алгоритм их анализа можно взять из файла magic.mime. Файл брать из любого дистрибута PHP... Правда там их дофига, так что лучше выбрать только нужные... 





--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
skyboy
Дата 4.2.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(bars80080 @  4.2.2009,  17:55 Найти цитируемый пост)
никакой вариантов кроме транслита? 

чтоб вернуть файл динамически через content-Type + content-disposition: attachement - нет, больше нет. правда, некоторые браузеры вполне принимают utf-имя файла(проверять - проверял, но какие браузеры - точно уже не скажу). потому если, скажем, ориентироваться только на opera, то можно и без транслита использовать.
Цитата(bars80080 @  4.2.2009,  17:55 Найти цитируемый пост)
Class 'finfo' not found 

значит, не подключено расширение. хостер позволяет редактировать php.ini? 
PM MAIL   Вверх
bars80080
Дата 4.2.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(ksnk @  4.2.2009,  18:31 Найти цитируемый пост)
Список сигнатур и примерный алгоритм их анализа можно взять из файла magic.mime

да, наверно, так лучше было бы. но теперь не зачем


Цитата(skyboy @  4.2.2009,  18:57 Найти цитируемый пост)
значит, не подключено расширение. хостер позволяет редактировать php.ini

с теми хостерами вообще договариваться тяжело. на нет и суда нет, будем транслитировать
PM MAIL WWW   Вверх
skyboy
Дата 4.2.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



собственно, нарыл довольно подробный(но неизвестно, насколько актуальный) обзор особенностей использования content-disposition: attachment в разных браузерах.
PM MAIL   Вверх
bars80080
Дата 5.2.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



ну вот, а я уже было пал духом. всё нормально прокатило в ИЕ6, ИЕ7, ФФ3 и опера 9.50

примерно в таком виде:

Код

if(!file_exists($file)) { echo 'file is not exists'; exit; }

header('Content-Type: application/x-unknown; charset=cp1251');
header('Content-Disposition: attachment; filename='.$file);

$a = readfile($file);
if($a === false) { echo 'cannot given file'; }
exit;

файлы сохраняются с нормальными русскими именами. осталось только попробовать, можно ли использовать кавычки в имени (')



остался такой вопрос: readfile насколько сильно напрягает сервер? я так понимаю, что не мало систем работает в таком духе, но всё же хотелось бы узнать
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.