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 :: Определить тип файла

 PHP.SU

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


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

> Описание: Как определить тип открываемого файла?
Павел
Отправлено: 10 Июля, 2008 - 22:35:19
Post Id


Новичок


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


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




Делаю скрипт, который читает содержимое удаленной веб-страницы в переменную, но сначала хотелось бы проверить, а веб-страница ли это? Как можно проверить тип открываемого URL-адреса? Ведь браузеру, когда заходишь на какой-нибудь сайт, передается тип документа (text/html, application/xml и т.д.). Как это можно проверить с помощью PHP в моем случае?
Заранее огромное спасибо!
 
 Top
valenok Модератор
Отправлено: 10 Июля, 2008 - 23:16:36
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Никак. Заголовки вам могут сунуть любые.


-----
Truly yours, Sasha.
 
My status
 Top
Павел
Отправлено: 11 Июля, 2008 - 11:53:41
Post Id


Новичок


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


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




Чаще всего ведь правильные заголовки посылают. Да вопрос не в том, подскажите, как можно эти заголовки прочитать, а правильные они или нет - вопрос отдельный.
 
 Top
EuGen Администратор
Отправлено: 11 Июля, 2008 - 12:36:36
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Веб-сервер отдает заголовок content-type, его и прочтите.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok Модератор
Отправлено: 11 Июля, 2008 - 12:40:41
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




При помощи curl
--

Тем не менее если вам этот метод вас не защитит. А если не защитит то и не надо им пользоваться как методом защиты.


-----
Truly yours, Sasha.
 
My status
 Top
Павел
Отправлено: 11 Июля, 2008 - 12:49:37
Post Id


Новичок


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


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




На счет того, что не защитит - это ладно. Я ведь только набираю опыт. Но если Вам не лень, то предложите другой вариант решения этой проблемы. Буду только благодарен.

Цитата:
При помощи curl

Уже нашел статью по этому вопросу. попытаюсь что-то из нее понять. Только там про сокеты написано...
 
 Top
valenok Модератор
Отправлено: 11 Июля, 2008 - 13:17:08
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Если в статье кюрла слишком много про сокеты - ищите другую.
В качетсве методов защиты -
вариант первый это не читать страницу с удалённого сервера вовсе,
второй вариант это вовсе не проверять тип, ибо какая разница что это.


-----
Truly yours, Sasha.
 
My status
 Top
Павел
Отправлено: 11 Июля, 2008 - 13:24:04
Post Id


Новичок


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


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




Цитата:
вариант первый это не читать страницу с удалённого сервера вовсе

Не, ну это не выход. Мне как раз и нужно читать страницу с удаленного сервера.
Цитата:
второй вариант это вовсе не проверять тип, ибо какая разница что это

Мне нужна именно веб-страница, а не какой-нибудь архив или PDF-файл...
 
 Top
valenok Модератор
Отправлено: 11 Июля, 2008 - 14:03:37
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




А скажите зачем это нужно


-----
Truly yours, Sasha.
 
My status
 Top
Павел
Отправлено: 11 Июля, 2008 - 14:14:51
Post Id


Новичок


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


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




valenok пишет:
А скажите зачем это нужно

Да вот в качестве тренировки решил написать небольшой скрипт для поиска по сайту, что бы ходил по ссылкам, находил только ссылки, принадлежащие этому сайту, открывал их и индексировал содержимое. По-этому нужно что бы он умел определять, где веб-страница, а где - нет.
 
 Top
Павел
Отправлено: 12 Июля, 2008 - 12:58:17
Post Id


Новичок


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


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




Нет, все таки у самого что-то не получается организовать проверку content-type. Прошу помощи. Вот код функции, которая открывает удаленный URL и читает исходный код документа в переменную. Нужно усовершенствовать ее, что бы она проверяла content-type и открывала только тектовые и HTML-документы.
PHP:
скопировать код в буфер обмена
  1. function urlGetContents(& $cUrl, $url, $port = 80, $timeout = 5, $errCount = 1)
  2. {
  3.     curl_setopt($cUrl, CURLOPT_URL, $url);
  4.     curl_setopt($cUrl, CURLOPT_PORT, $port);
  5.     curl_setopt($cUrl,CURLOPT_RETURNTRANSFER,1);
  6.     curl_setopt($cUrl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
  7.     curl_setopt($cUrl, CURLOPT_TIMEOUT, $timeout);
  8.     $content = curl_exec($cUrl);
  9.     if (curl_getinfo($cUrl,CURLINFO_HTTP_CODE) != 200) {
  10.         return (($errCount < 2) ? urlGetContents($cUrl, $url, $port, $timeout, ++$errCount) : false);
  11.     } else {
  12.         return $content;
  13.     }
  14.  
  15. }
  16.  
  17. function openurl($url) {
  18. $cUrl = curl_init();
  19. $urlAddress = "$url";
  20. if (($html = urlGetContents($cUrl, $urlAddress)) === false) {
  21.     return false;
  22. } else {
  23.     return $html;
  24. }
  25. curl_close($cUrl);
  26. }

Функция в качестве пораметра получает URL документа, а возвращает исходный код документа в виде строки.
CODE (text):
скопировать код в буфер обмена
  1. $text = openurl("http://example.com/test.html");


Прошу помощи в усовершенствовании функции. Заранее спасибо!
 
 Top
valenok Модератор
Отправлено: 12 Июля, 2008 - 13:17:43
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Лучше вам тогда проверять по расширению.
Тогда картинки и прочие уже не будут обрабатываться и скачиваться кюрлом.
А вам следует использовать CURLOPT_HEADER и парсить заголовки.


-----
Truly yours, Sasha.
 
My status
 Top
Павел
Отправлено: 12 Июля, 2008 - 14:29:40
Post Id


Новичок


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


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




По расширению я сделаю, но ведь бывает, что картинка или архив отдаются не по прямым ссылкам с расширением, а сгенерированные скриптом.
А вот с CURLOPT_HEADER у меня почему то ничего не выходит. Точнее не получается так сделать, что бы сначала получить только заголовки, проверить их, и если они подходят, скачать все остальное содержимое. У меня почему то либо вообще ничего не выводиться:
PHP:
скопировать код в буфер обмена
  1. $cUrl = curl_init();
  2. curl_setopt($cUrl, CURLOPT_HEADER, 1);
  3. $header = curl_exec($cUrl);
  4. echo $header;

(Здесь я ожидал, что на экран выведуться заголовки), либо полностью выводяться и заголовки и содержимое страницы:
PHP:
скопировать код в буфер обмена
  1. $cUrl = curl_init();
  2. curl_setopt($cUrl, CURLOPT_URL, $url);
  3. curl_setopt($cUrl, CURLOPT_HEADER, 1);
  4. $header = curl_exec($cUrl);
  5. echo $header;

Подскажите пожалуйста, как решить эту проблему. Ведь нужно сначала загрузить заголовки и проверить их, а потом все остальное. Какой смысл скачивать многомегабайтный архив, что бы потом проверить его заголовки и понять, что это не то, что ожидалось? Очень надеюсь на помощь.
 
 Top
valenok Модератор
Отправлено: 12 Июля, 2008 - 14:35:15
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




PHP:
скопировать код в буфер обмена
  1. <?
  2. $cUrl = curl_init();
  3. curl_setopt($cUrl, CURLOPT_HEADER, 1);
  4. $header = curl_exec($cUrl);
  5. echo $header;
  6.  

Заголовки чего ?
Где запрашываемая страница, где опция убирающая скачивание всего контента ?
ДАвай в мануал, там читать про все опции и оттуда же копировать код и потихоньку модифицировать.


-----
Truly yours, Sasha.
 
My status
 Top
Павел
Отправлено: 12 Июля, 2008 - 14:48:39
Post Id


Новичок


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


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




Я кажется начинаю разбираться что к чему... Закатив глазки Спасибо Вам большое!
Сейчас буду переделывать функцию чтения удаленного документа, но мне нужно знать какие content-type бывают, то есть какие мне оставлять. Перечислите мне пожалуйста, если нетрудно, а то я кроме text/html и text/plain никаких не знаю.

(Отредактировано автором: 12 Июля, 2008 - 14:49:01)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB