Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скачивание отрывка web-cтранички 
:(
    Опции темы
maksar
Дата 2.1.2005, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



Как можно закачать отрывок web - страницы(размером в 15 байт, например)?
Примерно это должно выгледить так(как я понял),
Код

 $fp = @fsockopen('www.sample.ru',80, &$errno, &$errstr, 30);
  fputs( $fp, '[i]что-то нужное мне[/i]');
 $buf = fgets($fp, 15);
 echo $buf;
 fclose($fp);

Что надо отправить серверу fputs'ом прежде чем я смогу получить содержимое странички?
PM MAIL   Вверх
Mal Hack
Дата 2.1.2005, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Этот код тебе вернет первые 15 килобайт гипертекста.
Код
<?php

$fn = "localhost";
$fp = fsockopen($fn, 80, $errno, $errstr, 30);
if (!$fp) {
  echo "$errstr ($errno)<br />\n";

} else {
  $out = "GET /_test/cache.php HTTP/1.1\r\n";
  $out .= "Host: localhost:80\r\n";
  $out .= "Connection: Keep-Alive\r\n\r\n";

$c = 0;

  fwrite($fp, $out);
  while (!feof($fp)||($c<15360) {
      echo fgets($fp, 128);
       $c += 128;
      flush();
  }
  fclose($fp);
}

?>


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

Это сообщение отредактировал(а) Mal Hack - 2.1.2005, 17:51
PM ICQ   Вверх
maksar
Дата 2.1.2005, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



Сенкс, плюс я нашел в ФАК еще 1 пример.
PM MAIL   Вверх
maksar
Дата 3.1.2005, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



Код

$fn = "utl.ru";
$fp = fsockopen($fn, 80, $errno, $errstr, 30);
if (!$fp) {
 echo "$errstr ($errno)<br />\n";

} else {
 $out = "GET /index.php HTTP/1.1\r\n";
 $out .= "Host: utl.ru:80\r\n";
 $out .= "Connection: Keep-Alive\r\n\r\n";


 fwrite($fp, $out);
 while(fgets($fp,500)!="\r\n" && !feof($fp));
 echo fread($fp, 5000);
 fclose($fp);
}

Но в вывод дописываются странные символы:
e82 до начала <!DOCTYPE HTML,
а потом и в сомом документе 19e, e93, 1a0

Может кто знает что это, и как избавится от этого?
PM MAIL   Вверх
Opik
Дата 3.1.2005, 03:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Код

$contents = join('', gzfile('http://'));
$start = strpos($contents, 'начало') + strlen ('начало');
$len = strpos ($contents, 'конец') - $start;
$con = substr ($contents, $start, $len);

PM MAIL Skype   Вверх
maksar
Дата 3.1.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



Opr, да красиво, оптимизированно, но ...
в $contents содержится вся скачанная страница, а мне нужно только буквально пару первых кб, а не вся страница. Ну да ладно зато понял как можно вырезать нужные мне данные без регулярных выражений,но все таки хотелось бы понять как это сделать с помощью регулярных выражений:
Есть строка:
Код

   <td width="100%" class="verda" background="http://www.sss.ru/img/bg_line_2.gif" valign="top">
<p align="right"> &nbsp;&nbsp;&nbsp;&nbsp; Дата/время: понедельник 3 январь 2005 - 04:46:00 <br>
<br> Температура на улице: <b>-2.4</b>°C</p>

Как оставить только -2.4, если, как видно, <b> и </b> больше негде не встречается?

Кстати, довно у меня был подобный вопрос, но мне тогда так никто и не дал вразумительного ответа: У меня была строка url c путем до картинки, а надо было оставить только имя файла. Сразу оговорюсь что использование basename в данном случае было не уместно.
PM MAIL   Вверх
IZ@TOP
Дата 3.1.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(maksar @ 3.1.2005, 09:14)
Как оставить только -2.4, если, как видно, <b> и </b> больше негде не встречается?

Не понял. Тебе надо вырезать первые символы из документа или то что между <b>...</b>?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
maksar
Дата 3.1.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 24.11.2003

Репутация: нет
Всего: нет



Что то между <b>...</b>, а точнее -2.4.
Вот решение preg_replace ("/(.*)<b>(.*)<\/b>(.*)/", "\\2", $strT);
Всем спасибо.
PM MAIL   Вверх
Opik
Дата 3.1.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Цитата
а надо было оставить только имя файла
Код
$test = parse_url("http://test.localhost.ru/file.php");
print '<pre>';
var_dump($test);

Даст результат:
Цитата
array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(17) "test.localhost.ru"
  ["path"]=>
  string(9) "/file.php"
}

Цитата
$contents содержится вся скачанная страница

а в $con сожержиться только нужная часть smile) да и получение всей страницы не будет отображаться на времени.
Добавлено @ 21:39
Да, в $test['path'] будет хранится путь до файла, само имя файла можно вытянуть либо через
pathinfo(), либо через basename();
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1127 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.