Gistrec

Хард кэш всех странц

Sep 26th, 2018
301
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.36 KB | None | 0 0
  1. /**
  2.  * Функция нужна для удаления GET-параметра из $_SERVER['REQUEST_URI]
  3.  * @param  string $requestUri $_SERVER['REQUEST_URI];
  4.  * @param  string $param      Параметр, который нужно удалить
  5.  * @return string             Новая строка, без параметра, который нужно было удалить
  6.  */
  7. function delUrlParam($requestUri, $param) {
  8.     $pieces = explode('?', $requestUri);
  9.     // Если есть GET-параметры
  10.     if (count($pieces) == 2) {
  11.         // Получаем все GET-параметры
  12.         $params = array();
  13.         parse_str($string[1], $params);
  14.         // Если есть нужный параметр - удаляем его
  15.         if (!empty($params[$param])) {
  16.             unset($params[$param]);
  17.         }
  18.         // Создаем новую строку из GET-параметров
  19.         $pieces[1] = http_build_query($params);
  20.         // Соединяем две части REQUEST_URI
  21.         if ($pieces[1] != "") {
  22.             $requestUri = implode('?', $pieces);
  23.         }else {
  24.             $requestUri = $pieces[0];
  25.         }
  26.     }
  27.     return $requestUri;
  28. }
  29. /**
  30.  * Функция нужна для добавления GET-параметра в url
  31.  * @param  string $requestUri $_SERVER['REQUEST_URI];
  32.  * @param  string $param      Параметр, который нужно добавить
  33.  * @param  string $value      Значение параметра
  34.  * @return string             Новая строка, без параметра, который нужно было удалить
  35.  */
  36. function addUrlParam($requestUri, $param, $value) {
  37.     $pieces = explode('?', $requestUri);
  38.     // Если есть GET-параметры
  39.     if (count($pieces) == 2) {
  40.         // Получаем все параметры
  41.         $params = explode('&', $pieces[1]);
  42.         // Во всех параметрах ищем параметр, который нужно задать/переопределить
  43.         foreach ($params as $index => $getParam) {
  44.             $getParam = explode('=', $getParam);
  45.             if (strtolower($getParam[0]) == strtolower($param)) {
  46.                 unset($params[$index]);
  47.             }
  48.         }
  49.         $params[] = "$param=$value";
  50.         $pieces[1] = implode('&', $params);
  51.     }else {
  52.         $pieces[1] .= "$param=$value";
  53.     }
  54.     $requestUri = implode('?', $pieces);
  55.     return $requestUri;
  56. }
  57.  
  58.  
  59. // Вхождения слов в uri, при котором не нужно кешировать
  60. $exeptionWords = array('no_cache', 'utm_source', 'wc-ajax', 'wordpress', 'wp-content',
  61.         'remove_cache' ,'wp-json', 'wp-login', 'wp-admin', 'sitemap.xml', 'robots.txt',
  62.         'remove_all_cache');
  63. $uri = $_SERVER['REQUEST_URI'];
  64.  
  65. $need_cache = true;
  66. foreach ($exeptionWords as $exeptionWord) {
  67.     if (strpos($uri, $exeptionWord)) {
  68.         $need_cache = false;
  69.         break;
  70.     }
  71. }
  72.  
  73. if ($need_cache && $_SERVER['REQUEST_METHOD'] === 'GET') {
  74.     // Получаем идентификатор страницы
  75.     //$key = md5($_SERVER['REQUEST_URI']);
  76.     $key = $_SERVER['REQUEST_URI'];
  77.     $key = str_replace('/', '|', $key);
  78.     // var_dump($key);
  79.     // Если страница есть в кеше
  80.     if ($page = CacheManager::getInstance()->get($key)) {
  81.         if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
  82.             echo 'Сообщение для IP: 81.1.252.98  =>  Страница есть в кеше';
  83.         // Отдаем её
  84.         die($page);
  85.     // Если страница еще не закеширована
  86.     }else {
  87.         if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
  88.             echo 'Сообщение для IP: 81.1.252.98  =>  Страницы нету в кеше';
  89.         // Получаем контент страницы
  90.         $requestUri = $_SERVER['REQUEST_URI'];
  91.         $requestUri = addUrlParam($requestUri, 'no_cache', 'true');
  92.         $page = file_get_contents('http://' . $_SERVER['HTTP_HOST'] . $requestUri);
  93.  
  94.         // Добавляем контент страницы в кеш, если страница существует (Т.е. нет 404)
  95.         $file_headers = @get_headers('http://' . $_SERVER['HTTP_HOST'] . $requestUri);
  96.         if($file_headers[0] != 'HTTP/1.1 404 Not Found') {
  97.             CacheManager::getInstance()->set($key, $page, 60 * 60 * 24 * 5); // 5 суток
  98.             // Отдаем страницу
  99.             die($page);
  100.         }
  101.         // Сюда приходим, если страницы не существует
  102.         // file_get_contants не получает страницу с ошибкой 404
  103.         // Придется ВП отдать эту страницу самому
  104.     }
  105. }elseif (!empty($_GET['no_cache'])) {
  106.     if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
  107.         echo 'Сообщение для IP: 81.1.252.98  =>  Кеш выключен';
  108.     $_SERVER['REQUEST_URI'] = delUrlParam($_SERVER['REQUEST_URI'], 'no_cache');
  109.     unset($_GET['no_cache']);
  110. }elseif (!empty($_GET['remove_cache'])) {
  111.     $uri = $_SERVER['REQUEST_URI'];
  112.     $uri = explode('?', $uri)[0];
  113.     $uri = str_replace('/', '|', $uri);
  114.  
  115.     $cacheFile = explode('|', $uri . '.cache');
  116.  
  117.     $timeFile = explode('|', $uri . '.time');
  118.  
  119.     // Для всех файлов сверяем название
  120.     $cdir = scandir('CacheManager/cache/');
  121.     foreach ($cdir as $fileName){
  122.  
  123.  
  124.         if (!in_array($value, array(".",".."))
  125.             && !is_dir('CacheManager/cache/' . $fileName))
  126.         {
  127.             $fileNameArr = explode('|', $fileName);
  128.             if ($fileNameArr == $cacheFile || $fileNameArr == $timeFile) {
  129.                 unlink('CacheManager/cache/' . $fileName);
  130.                 if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
  131.                     echo 'Сообщение для IP: 81.1.252.98  =>  Страница удалена';
  132.             }
  133.         }
  134.     }
  135. }elseif (!empty($_GET['remove_all_cache'])) {
  136.     // Для всех файлов сверяем название
  137.     $cdir = scandir('CacheManager/cache/');
  138.     foreach ($cdir as $fileName){
  139.  
  140.  
  141.         if (!in_array($value, array(".",".."))
  142.             && !is_dir('CacheManager/cache/' . $fileName))
  143.         {
  144.             unlink('CacheManager/cache/' . $fileName);
  145.         }
  146.     }
  147. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment