IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   php: как получить текстовый образ страницы? (http://www.imho.ws/showthread.php?t=72970)

MeatEater 07.11.2004 15:57

php: как получить текстовый образ страницы?
 
Уважаемый All,
Если на странице сайта в IE сделать Выделить все->Копировать, то можно сохранить результат в текстовый файл (картинки не нужны).
Как сделать то же самое с помощью php?
Вариант с удалением тегов не подходит, страница с функциями, include etc.
Нужно либо эмулировать работу php-IE, либо где-то взять готовый результат. Типа направить результат IE в поток, к которому привязан txt.
Спасибо.

Sheryld 07.11.2004 17:01

это почему же не подходит? очень даже подходит именно такой вариант(с удалением тегов).

1. конектишься к серверу по сокету.
2. получаешь целиком всю страницу(HTML-код).
3. далее пропускаешь ее через парсер(удаление тегов и т.д.).

MeatEater 07.11.2004 22:13

Sheryld

А не подскажешь насчет как законнектиться по сокету и получить всю страницу? Мне такое делать не приходилось... В мануале пример - бота какого-то делать. Вроде нужно получить контент?
Спасибо.

RaZEr 08.11.2004 09:52

Цитата:

А не подскажешь насчет как законнектиться по сокету и получить всю страницу?
RTFM: www.php.net/fopen www.php.net/fsockopen

MeatEater 08.11.2004 16:58

RaZEr
Спасибо за линки.
Все равно, сокет не открывается. Код простейший из примера, но дает ошибку.
Код такой:
$fp = fsockopen("www.blabla.com/page.php", 80, $errno, $errstr, 5);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.blabla.com/page.php\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 4096);
}
fclose($fp);
}
Ошибка "fsockopen(): php_network_getaddresses: gethostbyname failed" и "fsockopen(): unable to connect to www.blabla.com/page.php:80"

Порт менял на 0 (хост под юниксом). Тогда "Операция успешно завершена. (0)", но строки из файла на вывод не идут.

Нужно разрашить такие соединения на www.blabla.com?
Не подскажешь, что криво сделано?
Спасибо.

MeatEater 08.11.2004 18:50

Нашел где-то вот такой кусок кода. Он делает все, что нужно.

$content = downloadUrl("http://www.blabla.com/page.php");
echo $content;

function downloadUrl($url)
{
$urlParts = parse_url($url);
if ("" == $urlParts["host"]) return "";
if ("" == $urlParts["port"]) $urlParts["port"] = 80;
if ("" == $urlParts["path"]) $urlParts["path"] = "/";
$fp = fsockopen($urlParts["host"], 80, $errno, $errstr, 30);
if (!$fp) return "";
fputs($fp, "GET ".$urlParts["path"]." HTTP/1.0\r\nHost: ".$urlParts["host"]."\r\n\r\n");
$rv = "";
while (!feof($fp)) $rv = $rv.fgets($fp,128);
fclose($fp);
return $rv;
}

Всем еще раз спасибо.

V0iD 09.11.2004 10:30

Ошибки увидел в первом коде (понимаю, что готово... для общего развития :)):
1: fsockopen("www.blabla.com", 80, $errno, $errstr, 5);
5: $out = "GET /page.php HTTP/1.1\r\n";
6: $out .= "Host: www.blabla.com\r\n";

Hubbitus 09.11.2004 14:14

Проще и удобнее для подобных вещей юзать библиотеку CURL (ну если есть на хостинге конечно), таже задача - две строки...

Sych 12.11.2004 14:42

про всего удаленно открывать файлы fopen или забирать их целиком file_get_contents - но это должно быть разрешено в настройках сервера

MeatEater 15.11.2004 17:54

V0iD
Ты прав, ошибки есть :)
Sych
Не разрешено, хотя спасибо за идею.
Hubbitus
Про CURL не читал пока. Почитаю.

Спасибо всем за советы.


Часовой пояс GMT +4, время: 17:44.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.