| |
|
|
| | Задача следующего характера: нужно загрузить 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
Посоветуйте, как мне загрузить контент. Спасибо... | |
| |
|
|
| |
|
|
| |
для: NewAtoL
(25.01.2006 в 15:33)
| | | Правильно говорит тебе ошибка. Нет такого хоста, только что проверил сам. А вот если ты укажешь существующую страницу, то все будет нормально в обоих случаях. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(25.01.2006 в 15:37)
| | | я сознательно поменял :) ... Ну пусть будет www.google.com - ошибка та же. | |
| |
|
|
| |
|
|
| |
для: NewAtoL
(25.01.2006 в 16:01)
| | | Дык проверь что у тебя с ДНС-ами. Почему они не могут распознать хост по имени. Попробую сразу IP подставить иесли откроет, то проблемма с твоими ДНС, а если все же нет, то смотри в настройках, а разрешена ли у тебя вообще загрузка с внешних серверов. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(25.01.2006 в 16:17)
| | | --проблемма с твоими ДНС--- и --разрешена ли у тебя вообще загрузка с внешних серверов--
как проверить/настроить ?
Но я заливал на бесплатный хостинг (пхп поддерживает) - то же самое... | |
| |
|
|
| |
|
|
| |
для: NewAtoL
(25.01.2006 в 16:34)
| | | В любом файле пхп напиши инструкцию phpinfo();
Потом открой этот файл на своем сайте, выведутся все настройки сервера.
Ищи директиву fopen wrappers она должна быть включена, иначе с хоста запрещено использовать url в качестве файла для функции. | |
| |
|
|
| |
|
|
| |
для: XPraptor
(25.01.2006 в 16:44)
| | | allow_url_fopen=On если локально. Но я сижу под проксей.
На другом хосте тоже On. Значит разрешена | |
| |
|
|
| |
|
|
| |
для: NewAtoL
(25.01.2006 в 17:23)
| | | Странно. А что с ДНС, пробовал подставить ИП адрес вместо имени хоста? | |
| |
|
|
| |
|
|
| |
для: 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 | |
| |
|
|
| |
|
|
| |
для: 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");
ну и дальше все по плану... | |
| |
|
|
| |
|
|
| |
для: XPraptor
(25.01.2006 в 17:50)
| | | 1. Это надо делать даже если заливаешь скрипт на другой хостинг, а не юзаешь его локально?
2. А если прокся требует авторизации? (так оно и есть) :-( | |
| |
|
|
| |
|
|
| |
для: NewAtoL
(26.01.2006 в 08:54)
| | | Тогда добавялй еще в самый конец сокетовых строк и авторизацию:
"Proxy-Authorization: Basic " . base64_encode("Login:Password") . "\n\n"
base64_encode - это у меня на сях собственная функция, ты сам решишь как тебе base64 кодирнуть логин и пасс.
Формат логин пароль, так и должен идти как я написал логин, двоеточие пароль. | |
| |
|
|