Реклама на сайте Advertise with us

Кто силен в CURL

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 12.05.06
Сообщения: 132
Рейтинг: 29

Ссылка на сообщениеДобавлено: 08/05/08 в 16:50       Ответить с цитатойцитата 

На liex_ru код системы заточен под сокеты, а хостинг (например 3фн)поддерживает только курл icon_sad.gif (fsockopen -не работает)

Может кто нибудь поможет кусочек кода переделать?

Код:



// Генерация и отправка HTTP запроса к серверу

foreach ($srvs as $serv => $path) {
   logger("Connecting to $serv$path");//пишем в лог файл

   $query = "POST $path HTTP/1.0\r\n";//формируем переменную запроса
   $query .= "Host: $serv\r\n";
   $query .= "Connection: close\r\n";
   $query .= "Content-Type: application/x-www-form-urlencoded\r\n";
   $query .= "Content-Length: $content_length\r\n";
   $query .= "\r\n";
   $query .= $content;


   $fh = fsockopen($serv, 80, $errno, $errstr, 10);
   if (!$fh)   
                   continue;
   stream_set_timeout($fh, 20);//установка тайм аута
   fwrite($fh, $query);//пишем в поток возвращает количество записанных байт, или -1 при ошибке


   if (feof($fh))      // проверка на конец потока

      continue;


   $line = fgets($fh);//читаем символы из потока до '\n' 

   if (!$line)
      continue;

   $code = split(' ', $line); //делаем из строки массив разбиваем через ' '


   if (!$code || count($code) < 2) //если ... то выпадаем из цикла
      continue;

   $code = $code[1];
   if (substr($code, 0, 1) != '2')
      continue;

   while(!feof($fh)) {
      $line = fgets($fh);
      if ($line == "\r\n")
            break;
   }


   if (!feof($fh)) {
      $conn_ok = true;
      logger("Connected to $serv$path");
      break;
   }



}

unset($content);
unset($query);

if ((!isset($conn_ok) || !$conn_ok) && !is_file($index_page))
   exit("Error occurred:\nCan't connect to Liex server");

$xml_parser = xml_parser_create('ISO-8859-1');//создаёт XML-разборщик
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_set_element_handler($xml_parser, 'start_element_handler', 'end_element_handler');
xml_set_character_data_handler($xml_parser, 'character_data_handler');

while (!feof($fh))
   xml_parse($xml_parser, fread($fh, 8192));
fclose($fh);

xml_parser_free($xml_parser);







раскоментировал, пытался понять сам - не достаточно опыта icon_sad.gif

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 08/05/08 в 17:37       Ответить с цитатойцитата 

http://sowich.info/?s=curl
тут я описал основные принципы - думаю сможешь разобраться icon_smile.gif

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

1
 



С нами с 12.05.06
Сообщения: 132
Рейтинг: 29

Ссылка на сообщениеДобавлено: 08/05/08 в 17:45       Ответить с цитатойцитата 

тебя насерфил давно уже icon_smile.gif ссылка в закладках

0
 



С нами с 12.05.06
Сообщения: 132
Рейтинг: 29

Ссылка на сообщениеДобавлено: 09/05/08 в 14:44       Ответить с цитатойцитата 

Клиентский код liex.ru под CURL
Кому надо пользуйтесь, вроде работает

Код:
<?php
ini_set('display_errors', '1');
error_reporting(E_NOTICE);
setlocale(LC_ALL, 'ru_RU.CP1251');
$srvs = array(
   'server.liex.ru' => '/getSiteData',
   'gate3.liex.ru' => '/gate/liexgate.php',
   'gate2.liex.ru' => '/gate/liexgate.php'
);
$timestamp_file  = "connection_timestamp";
$index_page = "article_index";
$new_script = "new_script";
$log_file = "log";
$exec_file = "exec_index";
$host = $_SERVER['HTTP_HOST'];
$cache_time = 3600; //1 час
$no_cache_index = false;






function logger($message) {
   global $log_file;
   $logh = fopen($log_file, 'a');
   if(!$logh) {
      unlink($log_file);
      $logh = fopen($log_file, 'w');
      fwrite($logh, "OLD FILE DELETED\n");
   }
   fwrite($logh, "$message\n");
   fclose($logh);
}

$current_node_name = ''; $current_node_md5 = ''; $current_article_id = ''; $current_node_no_cache = ''; $current_node_exec = '';
$character_data = '';
$response_ok = false;
function start_element_handler($parser, $name, $attribs) {
   logger("start_element_handler called. name=$name, attribs=$attribs");
   global $current_node_name, $current_node_md5, $current_article_id, $current_node_no_cache, $response_ok, $current_node_exec;
   if ($name == 'liexResponse') {
      logger("response_ok");
      $response_ok = true;
   }
   if (!$current_node_name && ($name == 'script' || $name == 'index' || $name == 'article')) {
      $current_node_name = $name;
      $current_node_md5 = @$attribs['md5'];
      $current_node_no_cache = @$attribs['no-cache'];
      $current_node_exec = @$attribs['exec'];
      if ($name == 'article') {
         $current_article_id = @$attribs['id'];
         if (@$attribs['action'] == 'delete')
            delete_article($current_article_id);
      }
   }
}
function end_element_handler($parser, $name) {
   global $current_node_name, $current_node_md5, $current_article_id, $character_data, $current_node_no_cache, $response_ok, $current_node_exec;
   logger("end_element_handler called. name=$name, strlen(character_data) = ".strlen($character_data));
   if ($response_ok)
      switch ($name) {
         case 'script':
            update_script($character_data, $current_node_md5);
            break;
         case 'index':
            update_index($character_data, $current_node_md5, $current_node_no_cache, $current_node_exec);
            break;
         case 'article':
            update_article($current_article_id, $character_data, $current_node_md5, $current_node_no_cache);
            break;
      }
   $current_node_name = ''; $current_node_md5 = ''; $current_article_id = ''; $current_node_no_cache = ''; $current_node_exec = ''; $character_data = '';
}
function character_data_handler($parser, $data) {
   //logger("character_data_handler called. strlen(data) = ".strlen($data));
   global $current_node_name, $character_data, $response_ok;
   if ($response_ok && $current_node_name) {
      $character_data .= $data;
   }
}

function rewrite_file($fname, $data) {
   $fh = fopen($fname, 'wb');
   if(!$fh) {
      unlink($fname);
      $fh = fopen($fname, 'wb');
   }
   if($fh) {
      fwrite($fh, $data);
      fclose($fh);
   }
}

function update_index($data, $_md5, $no_cache, $exec_index) {
   logger("update_index called. md5(data)=".md5($data).", _md5=$_md5");
   if (!$data || !$_md5)
      return;

   global $index_page;
   if (strtoupper(md5($data)) == $_md5) {
      if ($no_cache == 'true') {
         global $no_cache_index;
         $no_cache_index = true;
      }
      rewrite_file($index_page, $data);
   }

   global $exec_file;
   if ($exec_index == 'true') {
      if (!file_exists($exec_file)) {
         $fh = fopen($exec_file, 'wb');
         fclose($fh);
      }
   } else {
      if (file_exists($exec_file)) {
         unlink($exec_file);
      }
   }
   
}

function update_article($id, $data, $_md5, $no_cache) {
   logger("update_article called. id=$id, md5(data)=".md5($data).", _md5=$_md5");
   if (!$id || !$data || !$_md5)
      return;

   if (strtoupper(md5($data)) == $_md5){
      rewrite_file($id, $data);
   }
}

function delete_article($id) {
   logger("delete_article called. id=$id");
   if (!$id)
      return;

   if (is_file($id))
      unlink($id);
}

function update_script($data, $_md5) {
   logger("update_script called. md5(data)=".md5($data).", _md5=$_md5");
   if (!$data || !$_md5)
      return;

   global $new_script, $host;
   if (strtoupper(md5($data)) == $_md5) {
      rewrite_file($new_script, $data);
logger("$new_script writed");
      if (!rename($new_script, 'index.php')) {
         if (file_exists('index.php')) {
            unlick('index.php');
            if (!rename($new_script, 'index.php')) {
               rewrite_file('index.php', $data);
            }
         }
      }
      unset($data);
logger("$new_script renamed");
      header('Location: '.$_SERVER['REQUEST_URI']);
logger("Redirect sent");
      exit();
   }
}

function return_index() {
   global $exec_file, $index_page;
   if (file_exists($exec_file)) {
      include($index_page);
   } else {
      readfile($index_page);
   }
}

//START

if (is_file($log_file))
   logger("\n\n");
logger("Script started at ".date('r')." ==============\n");

if (!file_exists('.htaccess')) {
   logger('Create .htaccess');
   $hth = fopen('.htaccess', 'wb');
   fwrite($hth, "RewriteEngine off\n\nDirectoryIndex index.php\n\nphp_flag register_globals off\n");
   fclose($hth);
}

//Проверка кеша
$can_connect = !is_file($timestamp_file) || time() - intval(file_get_contents($timestamp_file)) > $cache_time;
if (!$can_connect && is_file($index_page)) {
   return_index();
   exit();
}

// Получаем массив размещенных статей и их md5
$local_base = array();
$files = glob('*.*');
if ($files && is_array($files) && count($files))
   foreach ($files as $file)
      if ($file != 'index.php')
         $local_base[$file] = strtoupper(md5_file($file));

// Генерация XML запроса к серверу
$xml = "<?xml version=\"1.0\" encoding=\"Windows-1251\"?>\n<liexRequest>\n";
$xml .= "\t<host>$host</host>\n";
//$xml .= "\t<script md5=\"".strtoupper(md5_file(__FILE__))."\"/>\n";
$xml .= "\t<script md5=\"A2D243243591CF796099EF2B56A1EC7F\"/>\n";
if (file_exists($index_page)&&(is_file($index_page)))
   $xml .= "\t<index md5=\"".strtoupper(md5_file($index_page))."\"/>\n";
foreach($local_base as $id=>$_md5)
   $xml .= "\t<article id=\"$id\" md5=\"$_md5\"/>\n";
$xml .= '</liexRequest>';
unset($local_base);
logger("xml:\n".$xml);

// Генерация и отправка HTTP запроса к серверу
$content = 'data='.urlencode($xml);
$content_length = strlen($content);
unset($xml);

foreach ($srvs as $serv => $path) {
   logger("Connecting to $serv$path");
   $query = "POST $path HTTP/1.0\r\n";
   $query .= "Host: $serv\r\n";
   $query .= "Connection: close\r\n";
   $query .= "Content-Type: application/x-www-form-urlencoded\r\n";
   $query .= "Content-Length: $content_length\r\n";
   $query .= "\r\n";
   $query .= $content;


        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $serv);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $query);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);


         
     



}
unset($content);
unset($query);



$xml_parser = xml_parser_create('ISO-8859-1');
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_set_element_handler($xml_parser, 'start_element_handler', 'end_element_handler');
xml_set_character_data_handler($xml_parser, 'character_data_handler');
   $dataaa = curl_exec($ch);   
   xml_parse($xml_parser,  $dataaa);












     curl_close($ch);


xml_parser_free($xml_parser);

//Пишем время обновления
if ($response_ok) {
   logger("write connect time");
   $fh = fopen($timestamp_file, 'wb');
   fwrite($fh, time());
   fclose($fh);
}

if (is_file($index_page))
   return_index();

if ($no_cache_index)
   unlink($index_page);
?>

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »