Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка контента
 
 автор: NewAtoL   (25.01.2006 в 15:33)   письмо автору
 
 

Задача следующего характера: нужно загрузить html текст из другой страницы. Делал двумя вариантами и во обоих траблы:
1 Вариант

$str = "http://www.somehost.com/"
$html = file_get_contents ($str);

В ответ дается ошибка:

Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. in my_path_of_script on line 12

Warning: file_get_contents(http://www.somehost.com
[function.file-get-contents]: failed to open stream: No error in C:\AppServ\www\egol\index.php on line 12

2 Вариант. Через сокеты

$sock = fsockopen("www.somehost.com", 8080, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
$data = "q=" . urlencode($_GET['q']);
fwrite($sock, "POST /search.php HTTP/1.0\r\n");
fwrite($sock, "Host: www.somehost.com\r\n");
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
fwrite($sock, "Accept: */*\r\n");
fwrite($sock, "\r\n");
fwrite($sock, "$data\r\n");
fwrite($sock, "\r\n");
$headers = "";

while ($str = trim(fgets($sock, 4096)))
  $headers .= "$str\n";
echo "\n";
$html = "";
while (!feof($sock))
  $html .= fgets($sock, 4096);

fclose($sock);


ошибка:
Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Этот хост неизвестен. in myscript.php on line 16

Warning: fsockopen() [function.fsockopen]: unable to connect to www.somehost.com:8080 (Unknown error) in myscript.php on line 16

Посоветуйте, как мне загрузить контент. Спасибо...

   
 
 автор: XPraptor   (25.01.2006 в 15:37)   письмо автору
 
   для: NewAtoL   (25.01.2006 в 15:33)
 

Правильно говорит тебе ошибка. Нет такого хоста, только что проверил сам. А вот если ты укажешь существующую страницу, то все будет нормально в обоих случаях.

   
 
 автор: NewAtoL   (25.01.2006 в 16:01)   письмо автору
 
   для: XPraptor   (25.01.2006 в 15:37)
 

я сознательно поменял :) ... Ну пусть будет www.google.com - ошибка та же.

   
 
 автор: XPraptor   (25.01.2006 в 16:17)   письмо автору
 
   для: NewAtoL   (25.01.2006 в 16:01)
 

Дык проверь что у тебя с ДНС-ами. Почему они не могут распознать хост по имени. Попробую сразу IP подставить иесли откроет, то проблемма с твоими ДНС, а если все же нет, то смотри в настройках, а разрешена ли у тебя вообще загрузка с внешних серверов.

   
 
 автор: NewAtoL   (25.01.2006 в 16:34)   письмо автору
 
   для: XPraptor   (25.01.2006 в 16:17)
 

--проблемма с твоими ДНС--- и --разрешена ли у тебя вообще загрузка с внешних серверов--

как проверить/настроить ?

Но я заливал на бесплатный хостинг (пхп поддерживает) - то же самое...

   
 
 автор: XPraptor   (25.01.2006 в 16:44)   письмо автору
 
   для: NewAtoL   (25.01.2006 в 16:34)
 

В любом файле пхп напиши инструкцию phpinfo();
Потом открой этот файл на своем сайте, выведутся все настройки сервера.
Ищи директиву fopen wrappers она должна быть включена, иначе с хоста запрещено использовать url в качестве файла для функции.

   
 
 автор: NewAtoL   (25.01.2006 в 17:23)   письмо автору
 
   для: XPraptor   (25.01.2006 в 16:44)
 

allow_url_fopen=On если локально. Но я сижу под проксей.
На другом хосте тоже On. Значит разрешена

   
 
 автор: XPraptor   (25.01.2006 в 17:26)   письмо автору
 
   для: NewAtoL   (25.01.2006 в 17:23)
 

Странно. А что с ДНС, пробовал подставить ИП адрес вместо имени хоста?

   
 
 автор: NewAtoL   (25.01.2006 в 17:36)   письмо автору
 
   для: XPraptor   (25.01.2006 в 17:26)
 

Warning: file_get_contents(http://64.233.183.104) [function.file-get-contents]: failed to open stream: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. in myscript.php on line 13

Fatal error: Maximum execution time of 30 seconds exceeded in myscript.php on line 13

   
 
 автор: XPraptor   (25.01.2006 в 17:50)   письмо автору
 
   для: NewAtoL   (25.01.2006 в 17:36)
 

Млина, тока сейчас обратил внимание на твои слова "я под проксей сижу".
Конечно не даст тебе прокся открыть по file_get_contents и наверное по fopen() тоже.
Только сокеты. Конектся сначала к своей проксе сокетом (надеюсь хоть авторизации она не требует у тебя).

$sock = fsockopen("твоя прокся", порт прокси, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
$data = "q=" . urlencode($_GET['q']);
fwrite($sock, "POST полный путь к хосту откуда открываешь файл http:/ и т.д. /search.php HTTP/1.0\r\n");
fwrite($sock, "Host: тут хост который открываешь www.somehost.com\r\n");
ну и дальше все по плану...

   
 
 автор: NewAtoL   (26.01.2006 в 08:54)   письмо автору
 
   для: XPraptor   (25.01.2006 в 17:50)
 

1. Это надо делать даже если заливаешь скрипт на другой хостинг, а не юзаешь его локально?
2. А если прокся требует авторизации? (так оно и есть) :-(

   
 
 автор: XPraptor   (27.01.2006 в 14:41)   письмо автору
 
   для: NewAtoL   (26.01.2006 в 08:54)
 

Тогда добавялй еще в самый конец сокетовых строк и авторизацию:
"Proxy-Authorization: Basic " . base64_encode("Login:Password") . "\n\n"
base64_encode - это у меня на сях собственная функция, ты сам решишь как тебе base64 кодирнуть логин и пасс.
Формат логин пароль, так и должен идти как я написал логин, двоеточие пароль.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования