Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Функция нужна для удаления GET-параметра из $_SERVER['REQUEST_URI]
- * @param string $requestUri $_SERVER['REQUEST_URI];
- * @param string $param Параметр, который нужно удалить
- * @return string Новая строка, без параметра, который нужно было удалить
- */
- function delUrlParam($requestUri, $param) {
- $pieces = explode('?', $requestUri);
- // Если есть GET-параметры
- if (count($pieces) == 2) {
- // Получаем все GET-параметры
- $params = array();
- parse_str($string[1], $params);
- // Если есть нужный параметр - удаляем его
- if (!empty($params[$param])) {
- unset($params[$param]);
- }
- // Создаем новую строку из GET-параметров
- $pieces[1] = http_build_query($params);
- // Соединяем две части REQUEST_URI
- if ($pieces[1] != "") {
- $requestUri = implode('?', $pieces);
- }else {
- $requestUri = $pieces[0];
- }
- }
- return $requestUri;
- }
- /**
- * Функция нужна для добавления GET-параметра в url
- * @param string $requestUri $_SERVER['REQUEST_URI];
- * @param string $param Параметр, который нужно добавить
- * @param string $value Значение параметра
- * @return string Новая строка, без параметра, который нужно было удалить
- */
- function addUrlParam($requestUri, $param, $value) {
- $pieces = explode('?', $requestUri);
- // Если есть GET-параметры
- if (count($pieces) == 2) {
- // Получаем все параметры
- $params = explode('&', $pieces[1]);
- // Во всех параметрах ищем параметр, который нужно задать/переопределить
- foreach ($params as $index => $getParam) {
- $getParam = explode('=', $getParam);
- if (strtolower($getParam[0]) == strtolower($param)) {
- unset($params[$index]);
- }
- }
- $params[] = "$param=$value";
- $pieces[1] = implode('&', $params);
- }else {
- $pieces[1] .= "$param=$value";
- }
- $requestUri = implode('?', $pieces);
- return $requestUri;
- }
- // Вхождения слов в uri, при котором не нужно кешировать
- $exeptionWords = array('no_cache', 'utm_source', 'wc-ajax', 'wordpress', 'wp-content',
- 'remove_cache' ,'wp-json', 'wp-login', 'wp-admin', 'sitemap.xml', 'robots.txt',
- 'remove_all_cache');
- $uri = $_SERVER['REQUEST_URI'];
- $need_cache = true;
- foreach ($exeptionWords as $exeptionWord) {
- if (strpos($uri, $exeptionWord)) {
- $need_cache = false;
- break;
- }
- }
- if ($need_cache && $_SERVER['REQUEST_METHOD'] === 'GET') {
- // Получаем идентификатор страницы
- //$key = md5($_SERVER['REQUEST_URI']);
- $key = $_SERVER['REQUEST_URI'];
- $key = str_replace('/', '|', $key);
- // var_dump($key);
- // Если страница есть в кеше
- if ($page = CacheManager::getInstance()->get($key)) {
- if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
- echo 'Сообщение для IP: 81.1.252.98 => Страница есть в кеше';
- // Отдаем её
- die($page);
- // Если страница еще не закеширована
- }else {
- if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
- echo 'Сообщение для IP: 81.1.252.98 => Страницы нету в кеше';
- // Получаем контент страницы
- $requestUri = $_SERVER['REQUEST_URI'];
- $requestUri = addUrlParam($requestUri, 'no_cache', 'true');
- $page = file_get_contents('http://' . $_SERVER['HTTP_HOST'] . $requestUri);
- // Добавляем контент страницы в кеш, если страница существует (Т.е. нет 404)
- $file_headers = @get_headers('http://' . $_SERVER['HTTP_HOST'] . $requestUri);
- if($file_headers[0] != 'HTTP/1.1 404 Not Found') {
- CacheManager::getInstance()->set($key, $page, 60 * 60 * 24 * 5); // 5 суток
- // Отдаем страницу
- die($page);
- }
- // Сюда приходим, если страницы не существует
- // file_get_contants не получает страницу с ошибкой 404
- // Придется ВП отдать эту страницу самому
- }
- }elseif (!empty($_GET['no_cache'])) {
- if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
- echo 'Сообщение для IP: 81.1.252.98 => Кеш выключен';
- $_SERVER['REQUEST_URI'] = delUrlParam($_SERVER['REQUEST_URI'], 'no_cache');
- unset($_GET['no_cache']);
- }elseif (!empty($_GET['remove_cache'])) {
- $uri = $_SERVER['REQUEST_URI'];
- $uri = explode('?', $uri)[0];
- $uri = str_replace('/', '|', $uri);
- $cacheFile = explode('|', $uri . '.cache');
- $timeFile = explode('|', $uri . '.time');
- // Для всех файлов сверяем название
- $cdir = scandir('CacheManager/cache/');
- foreach ($cdir as $fileName){
- if (!in_array($value, array(".",".."))
- && !is_dir('CacheManager/cache/' . $fileName))
- {
- $fileNameArr = explode('|', $fileName);
- if ($fileNameArr == $cacheFile || $fileNameArr == $timeFile) {
- unlink('CacheManager/cache/' . $fileName);
- if ($_SERVER['REMOTE_ADDR'] == '81.1.252.98')
- echo 'Сообщение для IP: 81.1.252.98 => Страница удалена';
- }
- }
- }
- }elseif (!empty($_GET['remove_all_cache'])) {
- // Для всех файлов сверяем название
- $cdir = scandir('CacheManager/cache/');
- foreach ($cdir as $fileName){
- if (!in_array($value, array(".",".."))
- && !is_dir('CacheManager/cache/' . $fileName))
- {
- unlink('CacheManager/cache/' . $fileName);
- }
- }
- }
Advertisement