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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение содержимого документа по http 
:(
    Опции темы
PROme
Дата 23.1.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



подскажите каким образом можно наиболее быстро выполнить сабж т.е. получить содержимое, например хттп://сайт.ком/документ.пхп


--------------------
SEO-мастер
PM MAIL WWW   Вверх
penizillin
Дата 23.1.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



file() и implode()
PM MAIL ICQ   Вверх
PROme
Дата 25.1.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
file() и implode()

ну, уважаемый, это и так ясно... это, наверное, самый медленный метод... smile


--------------------
SEO-мастер
PM MAIL WWW   Вверх
IZ@TOP
Дата 25.1.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



PROme, вообще-то, это самый быстрый способ. Можно конечно еще проще сделать, вроде file_get_contents.


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

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


Опытный
**


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

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



почему?
PM MAIL ICQ   Вверх
IZ@TOP
Дата 25.1.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



penizillin, потому что работает на уровне РНР. Хотя в принципе может быть через сокеты будет и быстрее... хотя я в этом сомневаюсь.


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

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


Опытный
**


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

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



IZ@TOP, я от php уже отдалился, может разьяснишь?
я пробывал через file(), но очень долго, иногда по 5-10 секунд...
в то же время нашел один веб-прокси, он тоже не супер, но значительно быстрее, можешь посмотреть как он это делает, а то я что-то не догоняю, похоже что тоже через файлы, но что-то там еще с недом... я и не был силен в php, а как удалился в сео, так забыл что знал smile
вот, выдрал нужную функцию:

Код

/*======================================================================*\
Function: _httprequest
Purpose: go get the http data from the server
Input:  $url  the url to fetch
   $fp   the current open file pointer
   $URI  the full URI
   $body  body contents to send if any (POST)
Output:  
\*======================================================================*/

function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="")
{
 $cookie_headers = '';
 if($this->passcookies && $this->_redirectaddr)
  $this->setcookies();
 
 $URI_PARTS = parse_url($URI);
 if(empty($url))
  $url = "/";
 $headers = $http_method." ".$url." ".$this->_httpversion."\r\n";  
 if(!empty($this->agent))
  $headers .= "User-Agent: ".$this->agent."\r\n";
 if(!empty($this->host) && !isset($this->rawheaders['Host']))
  $headers .= "Host: ".$this->host."\r\n";
 if(!empty($this->accept))
  $headers .= "Accept: ".$this->accept."\r\n";
 if(!empty($this->referer))
  $headers .= "Referer: ".$this->referer."\r\n";
 if(!empty($this->cookies))
 {  
  if(!is_array($this->cookies))
   $this->cookies = (array)$this->cookies;

  reset($this->cookies);
  if ( count($this->cookies) > 0 ) {
   $cookie_headers .= 'Cookie: ';
   foreach ( $this->cookies as $cookieKey => $cookieVal ) {
   $cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; ";
   }
   $headers .= substr($cookie_headers,0,-2) . "\r\n";
  }
 }
 if(!empty($this->rawheaders))
 {
  if(!is_array($this->rawheaders))
   $this->rawheaders = (array)$this->rawheaders;
  while(list($headerKey,$headerVal) = each($this->rawheaders))
   $headers .= $headerKey.": ".$headerVal."\r\n";
 }
 if(!empty($content_type)) {
  $headers .= "Content-type: $content_type";
  if ($content_type == "multipart/form-data")
   $headers .= "; boundary=".$this->_mime_boundary;
  $headers .= "\r\n";
 }
 if(!empty($body))
  $headers .= "Content-length: ".strlen($body)."\r\n";
 if(!empty($this->user) || !empty($this->pass))
  $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n";

 $headers .= "\r\n";
 
 // set the read timeout if needed
 if ($this->read_timeout > 0)
  socket_set_timeout($fp, $this->read_timeout);
 $this->timed_out = false;
 
 fwrite($fp,$headers.$body,strlen($headers.$body));
 
 $this->_redirectaddr = false;
 unset($this->headers);
     
 while($currentHeader = fgets($fp,$this->_maxlinelen))
 {
  if ($this->read_timeout > 0 && $this->_check_timeout($fp))
  {
   $this->status=-100;
   return false;
  }
   
  if($currentHeader == "\r\n")
   break;
     
  // if a header begins with Location: or URI:, set the redirect
  if(preg_match("/^(Location:|URI:)/i",$currentHeader))
  {
   // get URL portion of the redirect
   preg_match("/^(Location:|URI:)[ ]+(.*)/",chop($currentHeader),$matches);
   // look for :// in the Location header to see if hostname is included
   if(!preg_match("|\:\/\/|",$matches[2]))
   {
    // no host in the path, so prepend
    $this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port;
    // eliminate double slash
    if(!preg_match("|^/|",$matches[2]))
      $this->_redirectaddr .= "/".$matches[2];
    else
      $this->_redirectaddr .= $matches[2];
   }
   else
    $this->_redirectaddr = $matches[2];
  }
 
  if(preg_match("|^HTTP/|",$currentHeader))
  {
               if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status))
   {
    $this->status= $status[1];
               }    
   $this->response_code = $currentHeader;
  }
   
  $this->headers[] = $currentHeader;
 }

 $results = '';
 do {
     $_data = fread($fp, $this->maxlength);
     if (strlen($_data) == 0) {
         break;
     }
     $results .= $_data;
 } while(true);

 if ($this->read_timeout > 0 && $this->_check_timeout($fp))
 {
  $this->status=-100;
  return false;
 }
 
 // check if there is a a redirect meta tag
 
 if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))
 {
  $this->_redirectaddr = $this->_expandlinks($match[1],$URI);
 }

 // have we hit our frame depth and is there frame src to fetch?
 if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match))
 {
  $this->results[] = $results;
  for($x=0; $x<count($match[1]); $x++)
   $this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host);
 }
 // have we already fetched framed content?
 elseif(is_array($this->results))
  $this->results[] = $results;
 // no framed content
 else
  $this->results = $results;
 
 return true;
}



--------------------
SEO-мастер
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0898 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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