false , # список файлов ядра 'modules_list' => false , # список файлов модулей 'files_list' => false , # список незагруженных файлов 'blocks_list' => false , # список незагруженных блоков 't3feed_conf' => false # основные настроки ); # состояние изменения баз данных (только для текстовых баз данных) $db_change = array( 'db_blocks' => false , # тексты блоков 'db_leads' => false , # список неотправленных лидов 'db_click' => false , # список неотправленных кликов 'db_redirect' => false # список правил редиректа ); $pos = -1; if(is_file("t3feed/conf/t3feed_conf.cfg")) { include "t3feed/conf/t3feed_conf.cfg"; $option['ROOT_DIR'] = $t3feed_conf['root_dir']; } else { # определение директории for($i=0;$i=0) { if(substr($_SERVER['REQUEST_URI'],$i,1)=="?") { $option['ROOT_DIR'] = substr($_SERVER['REQUEST_URI'],0,$pos+1); $i = strlen($_SERVER['REQUEST_URI']); } else if($i==strlen($_SERVER['REQUEST_URI'])-1) { $option['ROOT_DIR'] = substr($_SERVER['REQUEST_URI'],0,$pos+1); $i = strlen($_SERVER['REQUEST_URI']); } } } } # host + dir if($option['ROOT_DIR']=="/")$server_url = $_SERVER['HTTP_HOST']; else $server_url = $_SERVER['SERVER_NAME'] . $option['ROOT_DIR']; $option['idpart'] = ""; # id раздела $option['rootdir'] = $_SERVER['DOCUMENT_ROOT'] . $option['ROOT_DIR']; # корневая директория $option['kerneldir'] = "t3feed"; # директория ядра $option['rootdir'] = dirname($_SERVER['SCRIPT_FILENAME']).'/'; session_start(); # Домены серверов if(substr($_SERVER['DOCUMENT_ROOT'],0,15)=="D:/web/project/" && $_SERVER['REMOTE_ADDR']="127.0.0.1") { # приват зона $server_t3leads = "t3leads.lh"; $server_download = "load.t3leads.com"; } else { # общая зона $server_t3leads = "t3leads.com"; $server_download = "load.t3leads.com"; } ################################################################################ ################################################################################ ################################################################################ ### ### ### Основные функции, разбора простого XML, загрузки файлов и блоков ### ### ### ################################################################################ ################################################################################ ################################################################################ # Функция парсинга простого, одновложенного XML # # $xml - XML строка # $node - узел первого уровня # $nodes - массив вложенных узлов # function XML_Parser_Lite($xml,$node,$nodes,$flag="U") { $regexp = "/\<$node\>(.+)\<\/$node\>/$flag"; preg_match_all($regexp, $xml, $matches); $_node = $matches[1]; for($i=0;$i
"; #var_export($files); #print "

"; # загрузка файлов налету for($i=0;$i 32) { $control_code = substr($file_text,$content_length-32,32); $content = substr($file_text,0,$content_length-32); if (md5($content) == $control_code) { $file = fopen($option['rootdir'] . "t3feed/" . $files[$i]['path'], "wb"); flock($file,LOCK_EX); fwrite($file, $content); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "t3feed/" . $files[$i]['path'],0777); } else { $download_all = false; } } else { $download_all = false; } } if($files[$i]['type']=="modules") { $module_download_now = "now"; include_once $option['rootdir'] . "t3feed/" . $files[$i]['path']; $module_download_now = ""; } } if ($download_all) { if ($timestamp>10000000) $t3feed_conf['kernel_ts'] = $timestamp; else $t3feed_conf['kernel_ts'] = time(); $t3feed_conf["this_kernel_ts"] = time(); } return $download_all; } ################################################################################ ################################################################################ # Загрузка файлов function t3load_files($ts,$id_style,$load) { global $t3feed_conf,$server_download,$option,$files_list,$conf_change; $contents = t3_fileopen($server_download,80,"/style_files?id=$id_style&ts=$ts",5); $files = XML_Parser_Lite($contents,"file",array("path","auto")); $download_all = true; $regexp = "/\(.+)\<\/timestamp\>/U"; preg_match($regexp, $contents, $matches); $timestamp = $matches[1]; $t3feed_conf['files_ts'] = $timestamp; $t3feed_conf["this_files_ts"] = time(); //print $contents . "

"; //var_export($files); for($i=0;$i/n"; if($files[$i]["auto"]=="true" || $load==true) { # загрузка файлов налету $file_text = t3_fileopen($server_download,80,"/resource/$id_style/" . $files[$i]['path'],5); if (strlen($file_text)>0) { $file = fopen($option['rootdir'] . "resource/" . $files[$i]['path'], "wb"); flock($file,LOCK_EX); fwrite($file, $file_text); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "resource/" . $files[$i]['path'],0777); } } else { # пополнение списка незагруженных файлов # поиск присутстивя файла в массиве if(!in_array($files[$i]['path'], $files_list)) { # Добавление файлов в список незагруженных $files_list[] = $files[$i]['path']; $conf_change['files_list'] = true; } } } if ($download_all) { if ($timestamp>10000000) $t3feed_conf['files_ts'] = $timestamp; else $t3feed_conf['files_ts'] = time(); $t3feed_conf["this_files_ts"] = time(); } return $download_all; } ################################################################################ ################################################################################ # Заргузка блоков function t3load_blocks($ts,$id_style,$load) { global $t3feed_conf,$server_download,$option,$blocks_list,$conf_change,$db_blocks; $contents = t3_fileopen($server_download,80,"/style_texts?id=$id_style&ts=$ts",5); $texts = XML_Parser_Lite($contents,"text",array("id","auto")); $regexp = "/\(.+)\<\/timestamp\>/U"; preg_match($regexp, $contents, $matches); $timestamp = $matches[1]; $t3feed_conf['blocks_ts'] = $timestamp; $t3feed_conf["this_blocks_ts"] = time(); //var_export($texts); # список блоков for($i=0;$i

"; //var_export($text); //print "





"; if($text[0]['txt']!='') # не сохранять пустые блоки, т. к. это скорее всего ошибка { # добавление или изменение текстового блока в текстовой ьазе данных $db_change['db_blocks'] = true; $db_blocks[$id] = $text[0]; //var_export($text[0]); } } else { $txt = @quote_smart($text[0]['txt']); $title = @quote_smart($text[0]['title']); $parent = @quote_smart($text[0]['parent']); if($txt!='') # на случай падения сервера во время загрузки блока, чтобы старый блок не потерялся, если блок пустой, его не сохранять { # поиск блока с именем = $id в базе данных $Q = "select count(*) from " . $t3feed_conf["mysql_prefix"] . "db_blocks where id_part like '$id'"; $R = mysql_query($Q); $OK = mysql_result($R,0,0); if($OK=="1") { # блок со схожем имененм существует, изменение блока $Q = "update `" . $t3feed_conf["mysql_prefix"] . "db_blocks` set `txt`='$txt',`title`='$title',`parent`='$parent' where `id_part`='$id'"; mysql_query($Q); } else { # блока с данным имененм нет, добавление блока $Q = "insert into `" . $t3feed_conf["mysql_prefix"] . "db_blocks` (`id_part`,`txt`,`title`,`parent`) values ('$id','$txt','$title','$parent')"; mysql_query($Q); } mysql_free_result($R); } } } ################################################################################ ################################################################################ # сохранение всех конфигов function save_all_configuration() { global $conf_change,$kernel_list,$modules_list,$files_list,$blocks_list,$t3feed_conf,$option; # список файлов ядра if($conf_change['kernel_list']==true) { $configuration_string = ''; # сохранение файла конфигурации $file = fopen($option['rootdir'] . "t3feed/conf/kernel_list.cfg", "w"); flock($file,LOCK_EX); fwrite($file, $configuration_string); flock($file,LOCK_UN); fclose($file); } # список файлов модулей if($conf_change['modules_list']==true) { $configuration_string = ''; # сохранение файла конфигурации $file = fopen($option['rootdir'] . "t3feed/conf/modules_list.cfg", "w"); flock($file,LOCK_EX); fwrite($file, $configuration_string); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "t3feed/conf/modules_list.cfg",0777); } # список файлов фида if($conf_change['files_list']==true) { $configuration_string = ''; # сохранение файла конфигурации $file = fopen($option['rootdir'] . "t3feed/conf/files_list.cfg", "w"); flock($file,LOCK_EX); fwrite($file, $configuration_string); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "t3feed/conf/files_list.cfg",0777); } # список блоков незагруженных if($conf_change['blocks_list']==true) { $configuration_string = ''; # сохранение файла конфигурации $file = fopen($option['rootdir'] . "t3feed/conf/blocks_list.cfg", "w"); flock($file,LOCK_EX); fwrite($file, $configuration_string); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "t3feed/conf/blocks_list.cfg",0777); } # список глобальных настроек if($conf_change['t3feed_conf']==true) { if (isset($t3feed_conf['login']) && isset($t3feed_conf['password']) && isset($t3feed_conf['db_type']) && isset($t3feed_conf['auto_download']) && isset($t3feed_conf['style_id'])) { $configuration_string = ''; # сохранение файла конфигурации $file = fopen($option['rootdir'] . "t3feed/conf/t3feed_conf.cfg", "w"); flock($file,LOCK_EX); fwrite($file, $configuration_string); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "t3feed/conf/t3feed_conf.cfg",0777); } } } ################################################################################ ################################################################################ # закрыть соединение с базой данных, если это txt БД, то сохранить измененные данные function db_close() { global $option,$t3feed_conf,$db_change,$db_blocks,$db_leads,$db_click,$db_redirect; if($t3feed_conf['db_type']=="mysql") { @mysql_close(); } else { # перезаписать, или создать файлы массивов в которых произошли изменения $db_change_keys = array_keys($db_change); for($i=0;$i';"); # сохранение базы данных $file = fopen($option['rootdir'] . "t3feed/db/" . $db_change_keys[$i] . ".cfg", "w"); flock($file,LOCK_EX); fwrite($file, $configuration_string); flock($file,LOCK_UN); fclose($file); @chmod($option['rootdir'] . "t3feed/db/" . $db_change_keys[$i] . ".cfg",0777); } } } } ################################################################################ ################################################################################ # function un_magic_quotes_gpc($value) { if(get_magic_quotes_gpc()) { $value = stripslashes($value); } return $value; } ################################################################################ ################################################################################ # закрыть соединение с базой данных, если это txt БД, то сохранить измененные данные function doload() { global $t3feed_conf,$conf_change; # дозагрузка ядра if(time()>$t3feed_conf['this_kernel_ts']+$t3feed_conf['kernel_load_limit']) { # поиск файлов для дозаливки ядра $download_all = t3load_kernel($t3feed_conf['kernel_ts']); # изменить время последнего изменения ядра if ($download_all) { $t3feed_conf['this_kernel_ts'] = time(); $conf_change['t3feed_conf'] = true; } } # дозагрузка файлов стиля if(time()>$t3feed_conf['this_files_ts']+$t3feed_conf['files_load_limit']) { # поиск файлов для дозаливки ядра $download_all = t3load_files($t3feed_conf['files_ts'],$t3feed_conf['style_id'],$t3feed_conf['auto_download']); # изменить время последнего изменения ядра if ($download_all) { $t3feed_conf['this_files_ts'] = time(); $conf_change['t3feed_conf'] = true; } } # дозагрузка блоков стиля if(time()>$t3feed_conf['this_blocks_ts']+$t3feed_conf['files_load_limit']) { # поиск файлов для дозаливки ядра t3load_blocks($t3feed_conf['blocks_ts'],$t3feed_conf['style_id'],$t3feed_conf['auto_download']); # изменить время последнего изменения ядра $t3feed_conf['this_blocks_ts'] = time(); $conf_change['t3feed_conf'] = true; } } ################################################################################ ################################################################################ # Проверка установлен ли фид: if(is_dir($option['rootdir']. $option['kerneldir'])) { # загрузка файлов конфигурации include $option['rootdir']. $option['kerneldir'] . "/conf/t3feed_conf.cfg"; # Основные настройки include $option['rootdir']. $option['kerneldir'] . "/conf/blocks_list.cfg"; # Незагруженные блоки include $option['rootdir']. $option['kerneldir'] . "/conf/files_list.cfg"; # Незагруженные файлы include $option['rootdir']. $option['kerneldir'] . "/conf/modules_list.cfg"; # Список модулей include $option['rootdir']. $option['kerneldir'] . "/conf/kernel_list.cfg"; # Список файлов ядра # подключение к базе данных if($t3feed_conf["db_type"]!="mysql") { $t3feed_conf["db_type"] = 'text'; # подключение основных массивов данных include $option['rootdir']. $option['kerneldir'] . "/db/db_blocks.cfg"; # Блоки include $option['rootdir']. $option['kerneldir'] . "/db/db_leads.cfg"; # Неотправленные лиды include $option['rootdir']. $option['kerneldir'] . "/db/db_click.cfg"; # Неотправленная информация о посещениях сайта include $option['rootdir']. $option['kerneldir'] . "/db/db_redirect.cfg"; # Записи о редиректе # закрываем все массивы для записи! $db_change = array( 'db_blocks' => false , # тексты блоков 'db_leads' => false , # список неотправленных лидов 'db_click' => false , # список неотправленных кликов 'db_redirect' => false # список правил редиректа ); } else { # подключение к базе данных @mysql_connect($t3feed_conf["mysql_server"],$t3feed_conf["mysql_login"],$t3feed_conf["mysql_password"]); @mysql_select_db($t3feed_conf["mysql_database"]); } # дозагрузка doload(); # загрузка ядра for($i_loadkernel=0;$i_loadkernel0) { $error['dbPref'] = '1'; $error_array[] = lprint("Impossible MySQL Prefix tables","Недопустимые Префиксы таблиц"); } @mysql_free_result($R); } } @mysql_close(); } } # Feed login if(eregi("^([a-z0-9]){1,32}$",$feed_login)==false) { $error['feed_login'] = '1'; $error_array[] = lprint("Invalide Feed Login ( 1-9 a-z )","Недопустимый логин. (Только цифры и буквы латинского алфавита)"); } # Feed password if(eregi("^.{6,255}$",$feed_password)==false) { $error['feed_password'] = '1'; $error_array[] = lprint("Invalide Feed Password (min 6)","Недопустимый пароль. (Минимум 6 символов)"); } if(strlen($feed_title)<1 || strlen($feed_title)>256) { $error['feed_title'] = '1'; $error_array[] = lprint("Invalide Title (1-256 symbols)","Недопустимое название сайта. (1-256 Символов)"); } if(strlen($feed_descr)>512) { $error['feed_descr'] = '1'; $error_array[] = lprint("Invalide Description (0-512 symbols)","Недопустимая строка описание. (0-512 Символов)"); } if(strlen($feed_keys)>512) { $error['feed_keys'] = '1'; $error_array[] = lprint("Invalide Keywords (0-512 symbols)","Недопустимая строка кеи. (0-512 Символов)"); } if($error['feed_password']!="1") { # Feed confirm password if($feed_confirm_password!=$feed_password || eregi("^.{6,255}$",$feed_confirm_password)==false) { $error['feed_confirm_password'] = '1'; $error['feed_password'] = '1'; $error_array[] = lprint("Invalide confirm password","Пароли не совпадают"); } } # выбор стиля for($i=0;$i '*', 'keywords' => '*', 'redirect' => false, 'url' => '' ); # создание файлов (произойдет в конце создания фида!) # оставить открытые массивы, свободны для записи! $db_change = array( 'db_blocks' => true , # тексты блоков 'db_leads' => true , # список неотправленных лидов 'db_click' => true , # список неотправленных кликов 'db_redirect' => true # список правил редиректа ); } else { # подключение к базе данных mysql_connect($t3feed_conf["mysql_server"],$t3feed_conf["mysql_login"],$t3feed_conf["mysql_password"]); mysql_select_db($t3feed_conf["mysql_database"]); ### создание таблиц # таблица блоков $Q = "create table `" . $t3feed_conf["mysql_prefix"] . "db_blocks` (`id_part` varchar (128) NOT NULL ,`txt` text NULL ,`title` varchar (254) NOT NULL ,`parent` varchar (128) NOT NULL,`description` text NULL,keywords text NULL, PRIMARY KEY (`id_part`))"; mysql_query($Q); # таблица неотправленных запросов о лидах $Q = "create table `" . $t3feed_conf["mysql_prefix"] . "db_leads` (`idlead` int (11) NULL AUTO_INCREMENT,`postdata` text NULL,PRIMARY KEY (`idlead`))"; mysql_query($Q); # неотпавленная информация о кликах $Q = "create table `" . $t3feed_conf["mysql_prefix"] . "db_clicks` (`idclick` int (11) NOT NULL AUTO_INCREMENT,`postdata` text NULL,PRIMARY KEY (`idclick`))"; mysql_query($Q); # правила редиректа $Q = "create table `" . $t3feed_conf["mysql_prefix"] . "db_redirect` (`country` varchar (2) NOT NULL , `keywords` varchar (255) NOT NULL ,`reditect` enum ('true','false') DEFAULT 'false' NOT NULL ,`url` varchar (255) NULL,PRIMARY KEY (`country`,`keywords`))"; mysql_query($Q); # первое правило редиректа! (Отключение редиректа) $Q = "insert into `" . $t3feed_conf["mysql_prefix"] . "db_redirect` (`country`,`keywords`,`reditect`,`url`) values ('*','*','false','')"; mysql_query($Q); } # Загрузка файлов ядра t3load_kernel("0"); # Загрузка файлов t3load_files("0",$id_style,true); # Заргузка блоков t3load_blocks("0",$id_style,true); # для создания всех файлов конфигурации $conf_change = array( 'kernel_list' => true , 'modules_list' => true , 'files_list' => true , 'blocks_list' => true , 't3feed_conf' => true ); # сохранение всех конфигов save_all_configuration(); # закрыть соединение с базой данных, если это txt БД, то сохранить измененные данные db_close(); ?> T3Feed v. 2.0