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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать тип удаленного файла? Нужно узнать тип удаленного файла. 
V
    Опции темы
Павeл
  Дата 11.7.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



Здравствуйте!
Воспользовался этим решением (вариант с cURL) для подключения файла через HTTP, но мне в дополнение к этому нужно что бы проверялся content-type удаленного файла, и если он не HTML или текст, то что бы файл не подключался. Подскажите пожалуйста, как это можно реализовать?
Заранее, большое спасибо!
PM MAIL   Вверх
Feldmarschall
Дата 11.7.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Что значит - "не подключался"? Куда не подключался? К сети 200 вольт?
PM   Вверх
Павeл
  Дата 11.7.2008, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



Извните, неправильно выразился. Здесь описано, как прочитать в переменную содержимое удаленного документа. Так вот мне нужно как-то модифицировать этот скрипт, что бы он читал в переменную только документы с определенным content-type, а не все подряд. Вот собственно в этом и прошу мне помочь.
PM MAIL   Вверх
Павeл
  Дата 12.7.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



Проблема решена. Вот функция:
Код

function openurl($url) {
$contenttype = array("text/html", "text/plain", "text/richtext");    // Здесь задаем список разрешенных content-type.
$useragent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727"; // Задаем User_agent, отправляемый серверу.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "$useragent");
$headers = curl_exec($ch);
if (curl_getinfo($ch,CURLINFO_HTTP_CODE) != 200) {
    return FALSE;
} else {


$massiv = explode(";", curl_getinfo($ch,CURLINFO_CONTENT_TYPE));

if (in_array("$massiv[0]", $contenttype)) {
    $dalee = 1;
}
}
curl_close($ch);

if($dalee == 1) {
    $cUrl = curl_init();
    curl_setopt($cUrl, CURLOPT_URL, $url);
    curl_setopt($cUrl, CURLOPT_PORT, $port);
    curl_setopt($cUrl, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($cUrl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
    curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
    $content = curl_exec($cUrl);
    if (curl_getinfo($cUrl,CURLINFO_HTTP_CODE) != 200) {
        return FALSE;
    } else {
        return $content;
    }
    if(isset($html)) return $html;
    else return FALSE;

    curl_close($cUrl);
} else return FALSE;
}

PM MAIL   Вверх
MuToGeN
Дата 12.7.2008, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


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

Репутация: нет
Всего: 32



Копаем в сторону заголовка Content-Type в ответе сервера.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Павeл
Дата 12.7.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



Простите, а что там не так?
PM MAIL   Вверх
MuToGeN
Дата 12.7.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


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

Репутация: нет
Всего: 32



Павeл, у меня, к сожалению, нет ни времени, ни желания разбираться в вашем коде. Я просто сказал о том, где можно найти интересующую вас информацию.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
gta4kv
Дата 12.7.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: нет
Всего: 91



Павeл, там все так. А еще там будет тип файла.
PM MAIL   Вверх
Павeл
Дата 12.7.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



А? Имелось ввиду что тип файла можно определить по Content-type? Ну так я это знал, но проблема была в том, что я не знал как этот content-type прочитать, а теперь знаю, ведь написал выше, что проблема решена, этим я имел ввиду, что нашел способ прочитать Content-type и определить по его значению тип файла. А код функции предоставил для других людей, которые возможно будут искать решение подобной проблемы.

Кому нужно - подробнее на счет функции:
при вызове задаем один параметр - это URL документа, на выходе, если документ нашелся и он веб-страница или текст, будет отдан код документа в виде строки, в противном случае (если документ не найден или это не HTML/текст) будет возвращено FALSE.

Всем, кто пытался помочь - спасибо.  smile 

Это сообщение отредактировал(а) Павeл - 12.7.2008, 22:35
PM MAIL   Вверх
nerezus
Дата 12.7.2008, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 2
Всего: 43



Код

<?php
function filter($s) {
    return (false !== strpos($s, "Content-Type"));
}
$headers = get_headers('http://ya.ru'); # URL
$type_raw = implode('', array_filter($headers, 'filter'));
preg_match('#:\s*(.*)\s*;#', $type_raw, $matches);
$type = $matches[1];
echo $type;
?>


Вспоминал PHP.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Павeл
Дата 13.7.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



Почему же я раньше не знал о такой замечательной функции get_headers?  smile  Из кожи вон лезу, что бы прочитать эти проклятые заголовки, целый день читаю инфу про cURL и сокеты, а можно оказывается так просто в виде массива их получить!  smile  Целый день на это истратил...  smile 
PM MAIL   Вверх
MuToGeN
Дата 13.7.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


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

Репутация: нет
Всего: 32



Цитата(Павeл @  13.7.2008,  00:57 Найти цитируемый пост)
Почему же я раньше не знал о такой замечательной функции get_headers?

Ну, к примеру, CURLOPT_HEADER никто не отменял.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Павeл
Дата 13.7.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 11.7.2008

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



Ну вот я этим и пользовлся. Знал бы раньше, что есть get_headers, конечно меньше времени бы истратил...

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


 




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


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

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