|
|
|
| Не могу ответить в эту тему: http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8441&page=
Вопрос такой. Этим скриптом, про которой писал cheops, хорошо собираются заголовки морд, вида www.domen.ru. А как мне получить ответ от определенной страницы, вида www.domen.ru/somepage.html?
Сам скрипт вот:
<?php
// А это сама функция узнавания размера
function get_content($hostname, $path)
{
$line = "";
// Устанавливаем соединение, имя которого
// передано в параметре $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Формируем HTTP-запрос для передачи
// его серверу
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers);
$end = $false;
// Получаем ответ
while (!$end)
{
$line = fgets($fp, 1024);
if (trim($line) == "") $end = true;
else $out[] = $line;
}
fclose($fp);
}
return $out;
}
$hostname = "www.mail.ru";
$path = "/";
// Устанавливаем большее время работы
// скрипта - пока вся страница не будет загружена
// она не будет отображена
set_time_limit(180);
// Вызываем функцию
$out = get_content($hostname, $path);
// Выводим содержимое массива
foreach($out as $http)
{
echo $http."<br>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Aesha
(06.08.2007 в 14:39)
| | Это не самый удачный скрипт. Я бы посоветовал применить curl.
<?php
function get_url($url)
{
$r = curl_init();
// curl_setopt($r, CURLOPT_VERBOSE, 1);
// curl_setopt($r, CURLOPT_HEADER, 1);
curl_setopt($r, CURLOPT_NOPROGRESS, 0);
curl_setopt($r, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($r, CURLOPT_URL, $url);
$res = curl_exec($r);
return $res;
}
$out = get_url("http://www.domen.ru/somepage.html");
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(06.08.2007 в 15:07)
| | Почему-то дает ошибку "Fatal error: Call to undefined function: curl_init() in s:\home\localhost\www\test1.php on line 4"
Может быть проблемы с версией? | |
|
|
|
|
|
|
|
для: Aesha
(06.08.2007 в 15:48)
| | Нужно подключить библиотеку cURL
Для этого раскомментируйте в php.ini строку extension=php_curl.dll и скопируйте след. файлы из папки с php в system32/:
libeay32.dll
ssleay32.dll | |
|
|
|
|
|
|
|
для: ddhvvn
(06.08.2007 в 16:18)
| | Сделала на локальном компе. Вроде функция теперь работает, только не могу с локального компа приконнектиться к сайту. Пишет: "Fatal error: Maximum execution time of 30 seconds exceeded in s:\home\localhost\www\test1.php on line 11".
На сервере cURL не установлен, и, признаться, даже не знаю, как это сделать. Вроде прочитала ветку саппорта, но ничего не поняла. Нельзя ли как-нибудь все-таки модифицировать скрипт, который был приведен в начале?
Заранее спасибо. | |
|
|
|
|
|
|
|
для: Aesha
(06.08.2007 в 16:48)
| | Изначальный скрипт - это пример от заядлого пьяницы ;) Точнее не удачный =) Не в обиду cheops. А тот который Вам дали оптимальный и удобный, легко модифицируемый.
P.S. если на сервере нет cURL - это не сервер ИМХО =) | |
|
|
|
|
|
|
|
для: Aesha
(06.08.2007 в 16:48)
| | >Сделала на локальном компе. Вроде функция теперь работает, только не могу с локального компа приконнектиться к сайту. Пишет: "Fatal error: Maximum execution time of 30 seconds exceeded in s:homelocalhostwww est1.php on line 11".
Эксплорер с локального компа в интернет через прокси заходит?
>На сервере cURL не установлен, и, признаться, даже не знаю, как это сделать.
Такое бывает иногда на бесплатных серверах - но на них же fsockopen вообще запрещен как класс.
>Вроде прочитала ветку саппорта, но ничего не поняла.
Процитируйте здесь. А то мы тоже не поймем пока не увидим.
>Нельзя ли как-нибудь все-таки модифицировать скрипт, который был приведен в начале?
>Заранее спасибо.
Можно. Но не нужно. Это всяко будет хуже curl. | |
|
|
|
|
|
|
|
для: Trianon
(07.08.2007 в 01:54)
| | Локальный комп не собирал данные и через fsockopen. Так что тестировать нужно с сервера. Хостер - мастерхост. В нем, для того, чтобы работал cURL, нужно собрать свою конфигурацию php. Инструкция лежит по адресу <a href=http://masterhost.ru/support/doc/php/#compile>http://masterhost.ru/support/doc/php/#compile</a>. По инструкции я практически все сделала, но застряла собственно на этапе конфигурации php.ini. По инструкции написано:
Используя команду ./configure выполняем предварительную конфигурацию PHP для дальнейшей компиляции. Выполнив команду ./configure --help | more вы увидите полный список возможных опций, из которых вам нужно выбрать нужные. Пример конфигурации:
./configure --prefix=/home/uXXXXX/php \
--with-mysql=/usr/local --enable-ftp \
--enable-dbase --with-gdbm --with-ndbm \
--enable-xslt --with-xslt-sablot \
--with-iconv=/usr/local \
--with-expat-dir=/usr/local --with-gd=/usr/local \
--enable-gd-native-ttf=/usr/local \
--with-jpeg-dir=/usr/local --with-png-dir=/usr/local \
--with-freetype-dir=/usr/local --with-ttf \
--with-zlib-dir=/usr \
--enable-memory-limit --disable-posix \
--enable-force-cgi-redirect --enable-track-vars \
--disable-syntax-hl --enable-inline-optimization \
--without-pear --disable-debug
|
Для того, чтобы работал cURL нужно написать "–with-curl=/usr/local". Но я не знаю, как это правильно написать, и нужно ли еще что-то писать? Понимаю, что уже вопрос совсем не по теме, но, может быть, вы поможете разобраться? | |
|
|
|
|
|
|
|
для: Aesha
(07.08.2007 в 11:49)
| | >Для того, чтобы работал cURL нужно написать "–with-curl=/usr/local". Но я не знаю, как это правильно написать, и нужно ли еще что-то писать?
Написать нужно всю команду. Команда имеет вид
./configure --with-модуль1=парам1 --with-модуль2=парам2 ... --with-модульN=парамN
|
то есть состоит из имени команды и нескольких указаний для подключения модулей.
поскольку модулей может быть затребовано довольно много, строку команды разрешается переносить с помощью символа обартного слэша. Отсюда и возникает вид команды, приведенный в описании.
Команду можно попробовать всю набрать руками прямо в ssh-консоли .
Но поскольку наверняка это способ опечататься - лучше поместить ее в командный файл (обычно с расширением .sh) | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2007 в 15:07)
| | я после работы с курлом перешёл на fsockopen! лучше имхо! можно всё контролировать!
топикстартеру
function get_content($hostname, $path)
{
$line = "";
// Устанавливаем соединение, имя которого
// передано в параметре $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);
// Проверяем успешность установки соединения
if (!$fp) echo "$errstr ($errno)<br />\n";
else
{
// Формируем HTTP-запрос для передачи
// его серверу
$headers = "GET $path HTTP/1.1\r\n";
$headers .= "Host: $hostname\r\n";
$headers .= "Connection: Close\r\n\r\n";
// Отправляем HTTP-запрос серверу
fwrite($fp, $headers);
$output="";
while (!feof($fp)){$output .= fgets($fp,128);}
fclose($fp);
}
return $output;
}
|
уфф писал на коленке но вроде должно работать(выводить заголовки получаемые)!
К Trianon вопрос! у тебя случайно нет либы нормально работающей с сокс5(и 4) и прокси? не могу ничего толкового найти :( | |
|
|
|
|
|
|
|
для: tricket
(06.08.2007 в 18:26)
| | не должно.
И откровенно говоря, я уже устал повторять, почему именно не должно.
Ищите в поиске. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2007 в 15:07)
| | - | |
|
|
|
|
|
|
|
для: Aesha
(06.08.2007 в 14:39)
| | >А как мне получить ответ от определенной страницы, вида www.domen.ru/somepage.html?
Вместо
пишите
<?php
$path = "/somepage.html";
?>
|
| |
|
|
|