Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Странности с file_get_contents
 
 автор: fivemusic   (31.05.2008 в 10:11)   письмо автору
 
 

Здравствуйте! У меня возникла такая проблема:
есть 2 сайта 1 - hakomp.ru и 2 - marchenkov.com, так вот на сайте hakomp.ru вот какая ситуация:


echo file_get_contents("http://market.yandex.ru/vendors.xml?CAT_ID=109012&hid=90566");
Результат:
Warning: file_get_contents(http://market.yandex.ru/vendors.xml?CAT_ID=109012&hid=90566): failed to open stream: Operation timed out in /ya_market.php on line 26

echo file_get_contents("http://market.yandex.ru/");
Результат:
Warning: file_get_contents(http://market.yandex.ru/): failed to open stream: Operation timed out in /ya_market.php on line 26

echo file_get_contents("http://news.yandex.ru/yandsearch?rpt=nnews2&grhow=clutop&text=d");
Результат:
Работает, загружается.


А на marchenkov.com ситуация такая :


echo file_get_contents("http://market.yandex.ru/vendors.xml?CAT_ID=109012&hid=90566");
Результат:
Работает, загружается.

echo file_get_contents("http://market.yandex.ru/");
Результат:
Работает, загружается.

echo file_get_contents("http://news.yandex.ru/yandsearch?rpt=nnews2&grhow=clutop&text=d");
Результат:
Работает, загружается.


Даже если использовать не file_get_contents(), а сокеты к примеру - всеравно получается такая же картина! В чем может быть дело ?!??!?

   
 
 автор: BinLaden   (31.05.2008 в 13:43)   письмо автору
 
   для: fivemusic   (31.05.2008 в 10:11)
 

Возможно IP сервера, на котором располагается hakomp.ru попал в блек-лист файерволла сервера market.yandex.ru.

   
 
 автор: fivemusic   (31.05.2008 в 13:52)   письмо автору
 
   для: BinLaden   (31.05.2008 в 13:43)
 

А как объяснить тогда невозможность загрузки страницы маркета используя прокси ?
Вот код:


$ip="85.91.80.52:80"; $port="80";
$url="http://market.yandex.ru/search.xml?cvredirect=1&text=d";

  $url = parse_url($url); 
  $path = isset($url['path'])? $url['path'] : "/"; 
  if(isset($url['query']))
      $path .= '?' . $url['query']; 
  if(!($f = fsockopen($ip, $port, $ern, $ers))) echo "$ern, $ers";
else {
  fputs($f, "GET $path HTTP/1.0\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $reply .= $line; 
    else if($line == "\r\n") 
        $reply = ''; 

fclose($f); 
    }
echo $reply;



И еще... Если ип попал в блэк лист, то как можно с этим бороться ? Переезд к другому хостеру поможет ли ?, Или есть более безболезненные варианты ?!

   
 
 автор: BinLaden   (31.05.2008 в 13:57)   письмо автору
 
   для: fivemusic   (31.05.2008 в 13:52)
 

У Вас запрос к прокси-серверу неверный: в $path должен быть URL запрашиваемого ресурса, а еще, насколько я знаю, должен быть заголовок Host с IP прокси в данном случае.

   
 
 автор: fivemusic   (31.05.2008 в 14:07)   письмо автору
 
   для: BinLaden   (31.05.2008 в 13:57)
 

Пробую так :


$ip="85.91.80.52:80"; $port="80";
$url="http://market.yandex.ru/search.xml?cvredirect=1&text=d";

  if(!($f = fsockopen($ip, $port, $ern, $ers))) echo "$ern, $ers";
else {
  fputs($f, "GET $url HTTP/1.0\r\nHost: $ip\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $reply .= $line; 
    else if($line == "\r\n") 
        $reply = ''; 

fclose($f); 
    }
echo $reply;


Выдает :
The requested URL was not found

   
 
 автор: BinLaden   (31.05.2008 в 14:13)   письмо автору
 
   для: fivemusic   (31.05.2008 в 14:07)
 

> $ip="85.91.80.52:80"; $port="80";

Собственно, зачем в $ip порт указывать?

А моя ошибка в том, что в Host: нужно указывать хост запрашиваемого ресурса, то бишь market.yandex.ru

   
 
 автор: fivemusic   (31.05.2008 в 14:23)   письмо автору
 
   для: BinLaden   (31.05.2008 в 14:13)
 

В спешке проглядел.... =(
Пробую так :


$ip="85.91.80.52"; $port="80";
$url="http://market.yandex.ru/search.xml?cvredirect=1&text=d";

  if(!($f = fsockopen($ip, $port, $ern, $ers))) echo "$ern, $ers";
else {
  fputs($f, "GET $url HTTP/1.0\r\nHost: $ip\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $reply .= $line; 
    else if($line == "\r\n") 
        $reply = ''; 

fclose($f); 
    }
echo $reply;


выдает тоже самое ! The requested URL was not found.

Зато вот что странное я заметил! У меня в скрипте есть 2 функции :


// Получаем содержимое страницы через прокси
function load_datas($ip, $port, $url,$ref="http://yandex.ru/")
{
  $url = parse_url($url); 
  $host = isset($url['host'])? $url['host'] : "www.marchenkov.com"; 
  $path = isset($url['path'])? $url['path'] : "/"; 
  if(isset($url['query']))
      $path .= '?' . $url['query']; 
  if(!($f = fsockopen($ip, $port, $ern, $ers,20))) $resuka="000";
else {
  fputs($f, "GET $path HTTP/1.0\r\nHOST: $host\r\nREFERER: $ref\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $reply .= $line; 
    else if($line == "\r\n") 
        $reply = ''; 

fclose($f); 
    }
return $reply;
}


// Закачиваем файл на сервер через прокси
function download_obj($ip, $port, $pach_t, $url)
{ global $_SERVER;
  $url = parse_url($url); 
  $host = isset($url['host'])? $url['host'] : "www.marchenkov.com"; 
  $path = isset($url['path'])? $url['path'] : "/"; 
  if(isset($url['query']))
      $path .= '?' . $url['query']; 
  if(!($f = fsockopen($ip, $port, $ern, $ers,20))) return false;
else {
  fputs($f, "GET $path HTTP/1.0\r\nHOST: $host\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $content.=$line; 
    else if($line == "\r\n"){ $reply = ''; }
    else $content="";


fclose($f); 
$fff=fopen($_SERVER[DOCUMENT_ROOT].$pach_t, w);
fputs($fff, $content);
fclose($fff);
return true;
    }
}


Запускаешь - они прекрасно работают! Сейчас я попробовал сделать как надо : так :


// Получаем содержимое страницы через прокси
function load_datas($ip, $port, $url,$ref="http://yandex.ru/")
{
  if(!($f = fsockopen($ip, $port, $ern, $ers,20))) $resuka="000";
else {
  fputs($f, "GET $url HTTP/1.0\r\nHOST: $ip\r\nREFERER: $ref\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $reply .= $line; 
    else if($line == "\r\n") 
        $reply = ''; 

fclose($f); 
    }
return $reply;
}

// Закачиваем файл на сервер через прокси
function download_obj($ip, $port, $pach_t, $url)
{ global $_SERVER;
  if(!($f = fsockopen($ip, $port, $ern, $ers,20))) return false;
else {
  fputs($f, "GET $url HTTP/1.0\r\nHOST: $ip\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $content.=$line; 
    else if($line == "\r\n"){ $reply = ''; }
    else $content="";


fclose($f); 
$fff=fopen($_SERVER[DOCUMENT_ROOT].$pach_t, w);
fputs($fff, $content);
fclose($fff);
return true;
    }

}




и скрипт перестал картинки скачивать!!! А помоему он и содержимое не получает... (это я проверял на работаюбщем сайте который не в бане яши)

Да - оказывается ИП в блэк листе.... ЧТо можно сделать ???!??!?

---------
дико извеняюсь, вторые 2 ф-и не те скопировал

   
 
 автор: BinLaden   (31.05.2008 в 14:49)   письмо автору
 
   для: fivemusic   (31.05.2008 в 14:23)
 

> выдает тоже самое ! The requested URL was not found.

Я позже обновил своё сообщение: А моя ошибка в том, что в Host: нужно указывать хост запрашиваемого ресурса, то бишь market.yandex.ru

   
 
 автор: fivemusic   (31.05.2008 в 15:16)   письмо автору
 
   для: BinLaden   (31.05.2008 в 14:49)
 

$url="http://market.yandex.ru/search.xml?cvredirect=1&text=d";
$ip="85.91.80.52"; $port="80";
  $url = parse_url($url); 
  $host = isset($url['host'])? $url['host'] : "www.marchenkov.com"; 
  $path = isset($url['path'])? $url['path'] : "/"; 
  if(isset($url['query']))
      $path .= '?' . $url['query']; 
  if(!($f = fsockopen($ip, $port, $ern, $ers,20))) $resuka="000";
else {
  fputs($f, "GET $path HTTP/1.0\r\nHOST: $host\r\nREFERER: $ref\r\n\r\n"); 
for($reply = false; !feof($f); )   

    $line = fgets($f);   
    if($reply !== false) $reply .= $line; 
    else if($line == "\r\n") 
        $reply = ''; 

fclose($f); 
    }
echo $reply;


ВСЕМ СПАСИБО! ВОТ СКРИПТ КОТОРЫЙ РАБОТАЕТ!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования