С нами с 12.05.06
Сообщения: 132
Рейтинг: 29
|
Добавлено: 08/05/08 в 16:50 |
На liex_ru код системы заточен под сокеты, а хостинг (например 3фн)поддерживает только курл (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);
|
раскоментировал, пытался понять сам - не достаточно опыта
|
|
|
|
php
С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410
|
Добавлено: 08/05/08 в 17:37 |
|
|
|
|
С нами с 12.05.06
Сообщения: 132
Рейтинг: 29
|
Добавлено: 08/05/08 в 17:45 |
тебя насерфил давно уже ссылка в закладках
|
|
|
|
С нами с 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);
?> |
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
|
Спонсор раздела
|