| // | Copyright (c) 2004 Max Baryshnikov | // | http://sapid.sourceforge.net | // +----------------------------------------------------------------------+ // | This source file is free software; you can redistribute it and/or | // | modify it under the terms of the GNU Lesser General Public | // | License as published by the Free Software Foundation; either | // | version 2.1 of the License, or (at your option) any later version. | // | | // | This source file is distributed in the hope that it will be useful, | // | but WITHOUT ANY WARRANTY; without even the implied warranty of | // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | // | Lesser General Public License for more details. | // +----------------------------------------------------------------------+ //Cut off lost picture requests if (preg_match("/\.[gjpi][ipnc][fgo]/i", $_SERVER['REQUEST_URI'])) exit; include ("./etc/rc.conf.php"); /** * Put to cache * * @param $Message * @return boolean */ function toCache( $Message ) { $fp=fopen($root_path."cache/".md5($_SERVER['REQUEST_URI']), "w+"); if (@flock($fp, LOCK_EX)) { fwrite($fp, $Message ); @flock($fp, LOCK_UN); } fclose($fp); return true; } function deleteCache() { if (is_dir($root_path."cache")) { if ($dh = opendir($root_path."cache")) { while (($file = readdir($dh)) !== false) { if(strlen($file)>3) { @unlink($root_path."cache/".$file); } } closedir($dh); } } } function utf_strtolower($text) { $ntext = null; for ($i = 0; $i < strlen($text); $i++) { $ccode = ord($cchar = substr($text, $i, 1)); if ($ccode < 128) $ntext .= $cchar; else { $ncode = ord($nchar = substr($text, $i + 1, 1)); if ($ccode == 208 and $ncode < 176) { $ncode += 48; $ncode += 32; $ntext .= chr(($ncode > 239) ? 209 : 208) . chr(($ncode > 239) ? $ncode - 112 : $ncode - 48); } else { $ntext .= $cchar . $nchar; } $i++; } } return $ntext; } function htmlOptimize($parse){ $parse = ereg_replace(" ", " ", $parse); // Убираем все сдвоенные пробелы $parse = ereg_replace("\t", "", $parse); // Убираем все табуляции $parse = ereg_replace("\r\n ", "\r\n", $parse); // Убираем пробелы вначале строки $parse = ereg_replace("", "[bottom]", $parse); // Вырезаем коментарий снизу JavaScript $parse = ereg_replace("\r\n//-->","[bottom]", $parse); // Вырезаем коментарий снизу JavaScript $parse = preg_replace("/\r\n/", "", $parse); // Вырезаем остальные комментарии $parse = ereg_replace("\r\n", "", $parse); // Убираем все переносы каретки $parse = ereg_replace("\n", "", $parse); // Убираем все переносы каретки $parse = ereg_replace("\\[top\\]","", $parse);// $parse = ereg_replace(" ", " ", $parse); // Удаляем последние сдвоенные пробелы. $parse = preg_replace("#> <#", "> <", $parse); // Вырезаем двойные просветы между тегами. return $parse; } function getPageData($url) { $url=$url[2]; // адрес находится во втором кармане $url=parse_url($url); if (!isset($url['host'])) $url['host']=$_SERVER['HTTP_HOST']; // если не указан http://.../, дописываем текущий хост if (!isset($url['path'])) $url['path']='/'; if (substr($url['path'], 0, 1)!='/') $url['path']=str_replace('\\', '/', dirname($_SERVER["SCRIPT_NAME"])) . '/' . $url['path']; // если путь не от корня вебпространства, то дописываем полный путь $rn="\r\n"; $query='GET ' . $url['path'] . ' HTTP/1.0' . $rn . 'Content-Type: application/x-www-form-urlencoded' . $rn . 'Host: ' . $url['host'] . $rn . 'Accept: */*' . $rn . 'Connection: Keep-Alive' . $rn . 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7' . $rn . $rn; // формируем HTTP-запрос по указанному адресу $errno=0; $errstr=''; $f=fsockopen($url['host'], 80, $errno, $errstr, 50); if (!$f and $errno>0) { return $errstr; // произошла какая-то ошибка при подключении, возвращаем пустоту } else { @fwrite($f, $query); // отправляем запрос $fileData=''; $inputData=FALSE; while(!@feof($f)) { $line=fgets($f, 1024*1024); $line=str_replace("\r", '', $line); $line=str_replace("\n", '', $line); if ($inputData) $fileData.=$line; // запоминаем данные страницы else if (!$line) $inputData=TRUE; // пропускаем заголовки // ответа до первой // пустой строки } // читаем ответ @fclose($f); // закрываем поток return $fileData; } } function PHPruClear($text) { $noindex='/\/i'; $text = preg_replace($noindex, ' ', $text); $style='/\/i'; $script = '/\/i'; $noscript = '/\/i'; $doc = '/\/i'; $text = ereg_replace('\ \;', ' ', $text); $text = preg_replace($doc, ' ', $text); $text = preg_replace($style, ' ', $text); $text = preg_replace('# style="[^">]*"#i', ' ', $text); $text= preg_replace('#€#i','€', $text); $text= preg_replace('#&\#36;#i','$', $text); $text= preg_replace('#&#i','&', $text); $text= preg_replace('#§|¶|…|°#i','', $text); $text= preg_replace('#©#i','©', $text); $text= preg_replace('#®#i','®', $text); $text= preg_replace('#™#i','™', $text); $text= preg_replace('#«#i','«', $text); $text= preg_replace('#»#i','»', $text); $text= preg_replace('#‘|’|“|”|„|&\#132;|&\#147;#i','', $text); $text= preg_replace('#—|–#i','-', $text); $text= preg_replace("/\&([a-zA-Z]+)\;/is", " ", $text); $text = preg_replace ("/[\s,]+/", ' ', $text); $text = preg_replace("#TITLE#i", "title", $text); $text = preg_replace("#BODY#i", "body", $text); $text = preg_replace("#\r\n|\r |\t|\<\/p\>|\<\/div\>#i", " ", $text); $text = preg_replace("//", "", $text); $text = preg_replace($script, ' ', $text); $text = preg_replace($noscript, ' ', $text); $text = trim(strip_tags($text)); $text = ereg_replace("\.|\,|\;|\:|\!|\?|\"|\'|\)|\(|\[|\]|\{|\}|\*|\#|\№|\%|\^|\\|\/|\=|\|", " ", $text); $text = preg_replace("# #i", " ", $text); $text = preg_replace("# #i", " ", $text); return ($text); } session_start(); if ($HTML2CACHE=="enabled") { // Get from cache if file exists if(!preg_match("/".preg_quote($admin_path,"/")."/is", $_SERVER['REQUEST_URI']) AND !($_SESSION["user"])) { if(file_exists($root_path."cache/".md5($_SERVER['REQUEST_URI']))) { $content = @file_get_contents($root_path."cache/".md5($_SERVER['REQUEST_URI'])); if($content) { include(ROOT_PATH."usr/system/counter.inc.php"); if (preg_match("/DOCTYPE\swml/isU", trim(substr($stream,0,250)))) {header("Content-Type: text/vnd.wap.wml"); } elseif (preg_match("/^<\?xml/isU", trim(substr($stream,0,50)))) {header("Content-type: text/xml");} $content = preg_replace_callback('#\<\s*sapi:include\s+href\s*=\s*([\'"])([^\1]+?)\1\s*\>#is', 'getPageData', $content); // производим поиск всех блоков и замену через функцию getPageData print $content; exit; } } } if($_SESSION["user"] and isset($_POST) and $_POST) deleteCache(); } include(ROOT_PATH."etc/rc.d/debug.inc.php"); if(!$http_path or !is_file(ROOT_PATH."index.php")) message_die("SAPID not yet been configured or configuration is broken.

Please, enter the configuration utility and create a new configuration."); include(ROOT_PATH."etc/startup.inc.php"); if (!isset($_SESSION["user"]["login"])) { include(ROOT_PATH."usr/system/counter.inc.php"); }else{ $env["user"]=$_SESSION["user"]; } include(ROOT_PATH."mvc/controller/user_requests_analysis.inc.php"); $env["area51"]=0; if (isset($_SESSION["user"]["LOGIN"]) and $_SESSION["user"]["NOLOGIN"]=="") { $env["user.aStatus"]=1; $env["area51"]=1; if(isset($_GET["mode"])){ switch ($_GET["mode"]) { case "edit": if($env["page"]["pWrite"]) { $env["mode"]=1; $env["area51"]=2; }else{ $env["mode"]=0; } break; default: $env["mode"]=0; break; } } } if($panel=="") $sapi_obj = new sapi_parser($root_path."usr/templates/" . $env["page"]["TEMPLATE"], $env); // Looking for an information about current page children if($tree->map) { foreach($tree->map as $k=>$v) { if($v["ID"]==$env["page.ID"]) { $curPointer = $v["POINTER"]; break; } } eval("\$val = \$tree->structure".$curPointer."['CHILDREN'];"); $env["document.children"] = count($val); } $parse=($panel==""?$sapi_obj->build_page():$panel); $stream=""; if (isset($_SESSION["user"]["LOGIN"]) and $_SESSION["user"]["NOLOGIN"]=="") { if (isset($_POST["quick_save"])) { if ($error_message) $message="".$error_message.""; else $message="Data saved"; echo '
'.$message.'
'; exit; } $action=$http_path.($MODREWRITE=="disabled"?"?vpath=":"").preg_replace("/^\/(.*)\/*$/iU", "\\1/", str_replace("?".$_SERVER["QUERY_STRING"], "", $_SERVER["REQUEST_URI"])); if ($env["mode"]==1) { include(ROOT_PATH ."usr/system/js/startup.js.php"); $form_header=' "; } // Skin of administrative panel include(ROOT_PATH."usr/themes/default/templates/admin_panel.inc.php"); $stream=" ".$metatitle." ".($env["mode"]==1?" ":"")." ".($_GET["mode"]=="edit" ? "" : "")."
".($panel==""? "":"
") .$tools.($env["mode"]==1?$form_header:"").$parse .($panel==""? "":"
Дизайн-бюро «make»CleverSapid $VERSION
"); if (eregi("\[SAPID-NOCACHE\]", $stream)) { $stream = preg_replace("#\[SAPID-NOCACHE\]#i", "", $stream); // вырезаем системные теги из потока $systemMode="no-cache"; } }else { // Страница не кешируется if (eregi("\[SAPID-NOCACHE\]", trim(substr($parse,0,100)))) { $parse = preg_replace("#\[SAPID-NOCACHE\]#i", "", $parse); // вырезаем системные теги из потока $systemMode="no-cache"; } // Составляется SEO-страницы if (eregi("\[SAPID-SEO\]", trim(substr($parse,0,1000)))) { $temp_seo = eregi_replace("\[SAPID-SEO\]", "", $parse); // помещаем страницу в temp $temp_seo = utf_strtolower($temp_seo); $seo_title= PHPruClear(substr($temp_seo,strpos($temp_seo, ""),(strpos($temp_seo, "")-strpos($temp_seo, "")))); // Вырезали TITLE $temp_seo = PHPruClear(substr($temp_seo,strpos($temp_seo, "<body"),(strpos($temp_seo, "</body>")-strpos($temp_seo, "<body")))); // Вырезали BODY $temp_seo = $seo_title." ".$temp_seo; // Объединили TITLE+BODY $temp_seo = preg_replace("/ (я|вы|он|она|он|оно|ты|мы|ее|её|ей|ли|ль|же|ж|бы|б|млн.|млрд.|руб.|коп.|грн.|у.е.|мин.|час|сек.|сек|мес.|г.|гг.|ОАО|ООО|ЗАО|о|об|без|на|не|ни|но|ну|над|под|по|для|а|в|во|к|ко|и|из|их|под|за|до|от|то|с|со|за|г.|ул.|кв.|оф.|офис|им.|пл.|пр.|пер.|ст.|тел.|т\/ф|факс|№|\&\#8470\;|рис.|стр.|табл.|тд.|т.д.|тд|тп.|т.п.|тп) /", " ", $temp_seo); // Вырезали все слова короче 3 символов $temp_seo = preg_replace("/ (.|..) /", " ", $temp_seo); // Вырезали все слова короче 3 символов // Вырезаем кавычки, если они только с одной стороны слова $temp_seo = preg_replace("/ «(\S+)» /", " [++\\1++] ", $temp_seo); // Скрываем правильные $temp_seo = preg_replace("/ «(\S+) /", " \\1 ", $temp_seo); $temp_seo = preg_replace("/ (\S+)» /", " \\1 ", $temp_seo); $temp_seo = preg_replace("/ \[\+\+(\S+)\+\+\] /", " «\\1» ", $temp_seo); // Возвращаем правильные $temp_seo = preg_replace("/ (.|..|...) /", " ", $temp_seo); // Повторили для верности $temp_seo = ereg_replace(" | ", " ", $temp_seo); // Вырезаи все сдвоенные пробелы $seo = explode(" ", $temp_seo); $seo_uni = array_unique($seo); $count_prioritet=2; // сколько раз слово должно встретиться, чтобы попасть в массив 3 $seo_prioritet =array(); // будущий массив $count_output=10; // сколько самых встречающихся слов выводить в результате (например, 10) foreach ($seo_uni as $word) { $seo_prioritet[$word]=0; foreach($seo as $w) if ($w==$word) $seo_prioritet[$word]++; if ($seo_prioritet[$word]<$count_prioritet) unset($seo_prioritet[$word]); } arsort($seo_prioritet); $fin_seo=NULL; $z=0; foreach ($seo_prioritet as $i=>$k) { $z++; if ($z>$count_output) break; $fin_seo .= $i . ', '; } $fin_seo=substr($fin_seo, 0, -2); $parse = preg_replace("#\[SAPID-SEO\]#i", $fin_seo, $parse); // вставляем ключевые слова } if($HTMLOPTIMIZE=="enabled"){ $parse= htmlOptimize($parse);} $stream= $parse; } //$stream = tidy_repair_string($stream,"utf8"); $stream= preg_replace_callback('#(</?)(\w+)(.*?>)#i', create_function('$a', 'return $a[1] . strtolower($a[2]) . $a[3];'), $stream); $stream= preg_replace('#<ul></ul>|<ol></ol>|<li></li>|<p></p>|<em></em>|<strong></strong>|<nobr></nobr><sub></sub><sup></sup>#i', '', $stream); if ($env["area51"]==0){ $stream= preg_replace('#\<nobr\>#i', '<span class="nobr">', $stream); $stream= preg_replace('#\<\/nobr\>#i', '</span>', $stream); function antispam_mail($mail) { $mail=split("@",trim($mail)); //. $antispam="<script type=\"text/javascript\">//<![CDATA[\n"; $antispam.="write_ml('$mail[1]','$mail[0]');"; $antispam.="\n//]]></script><span class=\"noscript\">".$mail[0]."®".$mail[1]."</span>"; return $antispam; } $exp_mail = '/([a-zA-Z0-9|.|-|_]{2,256})@(([a-zA-Z0-9|.|-]{2,256}).([a-z]{2,4}))/'; $stream= preg_replace($exp_mail, antispam_mail('\\1@\\2'), $stream); } if (preg_match("/DOCTYPE\swml/isU", trim(substr($stream,0,250)))) { header("Content-Type: text/vnd.wap.wml"); } elseif (preg_match("/^<\?xml/isU", trim(substr($stream,0,50)))) { header("Content-type: text/xml"); } if ($MODREWRITE=="disabled") { $stream=preg_replace("/(<a[\sa-zA-Z\"\._\-=\;\:]+)href=(\"|')?(?:".addcslashes($http_path, "/")."|\/)([^\?]){1}([^\s\"\'\?]{0,})(\"|')?([\sa-zA-Z\"\._\-=]*)>/isU", "\\1href=\\2?vpath=/\\3\\4\\5\\6>", $stream); $stream=preg_replace("/location=(\"|')?(?:".addcslashes($http_path, "/")."|\/)([^\?]{1})([^\s\"\'\?]{0,})(\"|')?/is", "location=\\1".$http_path."?vpath=/\\2\\3\\4", $stream); $stream=preg_replace("/(<form[\sa-zA-Z\"\._\-=\;\:]+)action=(\"|')(?:".addcslashes($http_path, "/")."|\/)([^\?]){1}([^\s\"\'\?]{0,})(\"|')([\sa-zA-Z\"\._\-=]*)>/isU", "\\1action=\\2?vpath=/\\3\\4\\5\\6>", $stream); } if ($HTML2CACHE=="enabled") { // Get from cache if file exists if($systemMode != "no-cache" AND !$_POST AND !preg_match("/".preg_quote($admin_path,"/")."/is", $_SERVER['REQUEST_URI']) AND !($_SESSION["user"])) toCache($stream); } $stream=preg_replace_callback('#\<\s*sapi:include\s+href\s*=\s*([\'"])([^\1]+?)\1\s*\>#is', 'getPageData', $stream); // производим поиск всех блоков и замену через функцию getPageData echo $stream; $env["time_finish"]=getmicrotime(); $env["exec_time"]=$env["time_finish"]-$env["time_start"] . " sec"; if ($sapi_obj->error and $_SESSION["user"]["LOGIN"]) echo "<div style=\"position: absolute; top: 40%; left: 40%; background-color: #D9D9D9; border: 1px solid red; padding: 10px; width: 280px; position: absolute; height: 40px; display: block; \"/><b style=\"color: red;\">Error!</b><br /><span style=\"font-size: 10px;\">".$sapi_obj->error."</span></div>"; // echo "<div style=\"background-color: Silver; border: 1px solid maroon; padding: 10px; width: 310px; position: absolute; top: 45%; left:36%; height: 40px; display: block; \"/>Execution time: " . $env["exec_time"] . "</div>"; unset($sapi_obj); ?>