Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: получить mime тип файла удаленно

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: как получить?
redow
Отправлено: 27 Августа, 2008 - 12:09:58
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




здравствуйте всем.
стал вопрос боком, как получить mime-type файла удаленно не закачивая себе на серв? mime_content_type не возвращает ни типа файла, ни ошибки что не смогла получить.
заранее спасибо.
 
 Top
Вездеход
Отправлено: 27 Августа, 2008 - 14:02:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008  
Откуда: Россия


Помог: 0 раз(а)




удаленно - это на компе посетителя сайта?


-----
о великий nl2br!
Хочешь невероятных ощущений? Юзай блокнот! Блокнот - чудеса сбываются!
Чем меньше вы знаете PHP - тем ценнее мои знания!
 
 Top
pifon1989
Отправлено: 27 Августа, 2008 - 17:13:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




redow пишет:
стал вопрос боком, как получить mime-type файла удаленно не закачивая себе на серв? mime_content_type не возвращает ни типа файла, ни ошибки что не смогла получить.

MIME? Как я слышал, его обычно явой ковыряют.
Можно конечно и через php попробовать... но присоединяюсь к вопросу выше.

(Отредактировано автором: 27 Августа, 2008 - 17:13:55)



-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
redow
Отправлено: 27 Августа, 2008 - 19:40:03
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




нет, удаленно - значит с другого хоста.
тоесть, есть, например, список ссылок, по которым я должен пройти php скриптом. в частности нужны только html файлы и только.
сейчас скрипт тянет все указанные файлы (а могут быть и архивы, и фильмы, и все что угодно) и жрет прилично трафика, и вот что бы избежать этого, проверять, является ли файл html документом.
возможно ли такое?

(Отредактировано автором: 27 Августа, 2008 - 19:41:40)

 
 Top
pifon1989
Отправлено: 27 Августа, 2008 - 19:53:19
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




Конечно.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // открываем папку с файлами, где бы та ни была
  4. $dh = opendir("путь к вашему каталогу");
  5. // запускаем цикл
  6. while($filename = readdir($dh))
  7. {
  8. // проверяем соответствие
  9. if (ereg("\.html$", $filename))
  10. // производим операцию
  11. echo '.html файл';
  12. }
  13. ?>
  14.  

(Отредактировано автором: 27 Августа, 2008 - 20:57:03)



-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
redow
Отправлено: 28 Августа, 2008 - 10:53:23
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




а я думал я ясно выразился Хм

я же сказал, MIME тип а не просто тупое соответствие на расширение... а такое чудо просто нет смысла даже делать.

ладно, хотел увидеть ответ от действительно знающих людей, но они видно в отпуске Улыбка
 
 Top
pifon1989
Отправлено: 28 Августа, 2008 - 11:59:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Май 2008  


Помог: 0 раз(а)




redow пишет:
и вот что бы избежать этого, проверять, является ли файл html документом.
возможно ли такое?

Для этого не обязательно копать header-ы и искать тип файла.
redow пишет:
ладно, хотел увидеть ответ от действительно знающих людей, но они видно в отпуске

Конечно, одни дураки тут, один вы умный.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // открываем папку с файлами, где бы та ни была
  4. $dh = opendir("/var/www/nobledream/data/http/forum") or die("Не могу открыть папку");
  5. // запускаем цикл
  6. while($filename = readdir($dh))
  7. {
  8. // проверяем соответствие
  9. $mime = myme_content_type($filename);
  10. // производим операцию
  11. echo "<br>".$mime;
  12. }
  13. ?>
  14.  

Но учтите: для работы mime_content_type() необходима установка из библиотеки PECL.
Причём finfo() намного более продвинут и функционален, так что, от себя, советую качать именно его.
http://www[dot]google[dot]ru/search?hl=e[dot][dot][dot]amp;aq=f&oq=
После установки курите маны ru.php.net.
Если лениво качать из билиотеки, ищите отдельный скрипт. Найдёте, сынклюдите в свой скрипт и только тогда заработает.


-----
Ассемблер для Чайников
Всем любителям Pascal посвящается:
function writeln($text) {echo '<br>'.$text};
 
 Top
redow
Отправлено: 28 Августа, 2008 - 12:00:12
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Авг. 2008  


Помог: 0 раз(а)




в общем, придумал как сделать, но немного коряво получилось, тк другого способа не нашел.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $fp = fsockopen ("example.com", 80, $errno, $errstr, 30);
  4. if (!$fp) echo "$errstr ($errno)<br>\n";
  5. else
  6. {
  7.         fputs ($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n");
  8.         $i="0";
  9.         while (!feof($fp))
  10.         {
  11.                 $gg = fgets ($fp,4096);
  12.                 // максимальное количество оборотов цикла, фактически собираем только заголовки
  13.                 if ($i>10) break;
  14.                 if (strrpos($gg, "Type:"))
  15.                         {
  16.                                 preg_match("|Content-Type: (.*); charset=(.*)|i", $gg, $res);
  17.                                 $mime = $res[1]; // mime-тип файла
  18.                                 $charset = $res[2]; // кодировка возвращаемая сервером /на всякий случай
  19.                         }
  20.                 $i++;
  21.         }
  22.         fclose ($fp);
  23. }
  24.  
  25. ?>
  26.  

(Добавление)
ЗЫ
Цитата:
Конечно, одни дураки тут, один вы умный.

я такого не говорил и так не считаю. если бы я был умный, я бы не задавал тут вопрос, верно? но я ясно выразился что мне нужен MIME УДАЛЕННО, а ваши ответы прозвучали несколько не профессионально, вам не кажется?

Цитата:
// открываем папку с файлами, где бы та ни была
$dh = opendir("/var/www/nobledream/data/http/forum") or die("Не могу открыть папку");

Цитата:
Но учтите: для работы mime_content_type()


курим первый пост Хм

(Отредактировано автором: 28 Августа, 2008 - 12:23:35)

 
 Top
Гость
Отправлено: 05 Сентября, 2008 - 17:42:13
Post Id


УДАЛЁН










Знаете Эйнштейна? Все относительно Улыбка
Тот вариант что Вы предложили конечно неплох, но он не идеален. Сам сервер Apache в определенных случаях выдает MIME-тип в соответствии с расширениями. В httpd.conf есть раздел с определением MIME-типов.
Уж тогда надо более жестким методом - открывает файл в бинарном редиме и читаем, если "яШа" то gif, если "MZР" то exeшник и т.д.
 
 Top
Svyatoslavik
Отправлено: 27 Сентября, 2009 - 23:50:37
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




я тут тоже мучался с подобным вопросом (не смог включить mime_content_type - считаю что это невозможно, покрайней мере я не смог)
решил написать свой php-шный вариант функции распознавания типа файлов

PHP:
скопировать код в буфер обмена
  1.  
  2. function getFileType($file_str){
  3.         $default_type = 'jpg';
  4.         $firstTwoByte = bin2hex($file_str[0].$file_str[1]);
  5.         $typesArray = array(
  6.                 'ffd8'  => 'jpg',
  7.                 '424d'  => 'bmp'
  8.         );
  9.         $type = $typesArray[$firstTwoByte];
  10.         if(!$type) return $default_type;
  11.         else return $type;
  12. }
  13.  
  14.  


какие байты какому типу соответствуют можно узнать из файла magic.mime
или просто открыть нужный файл в hex - редакторе и посмотреть первые байты
 
 Top
JustUserR
Отправлено: 28 Сентября, 2009 - 11:38:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




redow Поищите на форуме еще давно я писал готовую функцию для получения удаленно все информации о файле не скаичвая его (Это PHP-функция и она написана с помощью sockets)


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB