Изменить расширение файла в REQUEST_URI

123
28 ноября 2019, 19:30

Как можно получить php-скриптом часть REQUEST_URI без расширения html, htm, php и т.п?

Или заменить html на cache в этом самом REQUEST_URI?

У меня сейчас такая задача:

Требуется в код динамически генерируемых страниц добавить скрипт, который будет проверять, существование этой страницы в кэше сервера. То есть с расширением cache, а не html.

if (file_exists(--DIR--.'/cache/НАЗВАНИЕ_СТРАНИЦЫ.cache'))

Как я могу получить часть url, которая соответствует этому НАЗВАНИЮ СТРАНИЦЫ? То есть REQUEST_URI без расширения?

Спасибо!

Пробовала так:

if (file_exists(__DIR__.'/cache/filename($_SERVER["REQUEST_URI"]).cache'))
{  
    readfile(__DIR__.'/filename($_SERVER["REQUEST_URI"]).cache'); 
    exit();

Но получаю в результате файл с именем: filename($_SERVER["REQUEST_URI"]).cache Не получает скрипт имя файла.

Аналогичные результаты с

if (file_exists(__DIR__."/cache/pathinfo(__FILE__, PATHINFO_FILENAME).cache")) {
readfile(__DIR__."/cache/pathinfo(__FILE__, PATHINFO_FILENAME).cache"); exit();
Результат - файл с именем : pathinfo(FILE, PATHINFO_FILENAME).cache

Answer 1

Вот такой код у меня прекрасно заработал без всякого дополнительного расширения .cache. В самом начале страницы перед html:

<?php
$curr_url = basename($_SERVER['REQUEST_URI']);
if (file_exists(__DIR__."/cache/$curr_url"))
{  
    readfile(__DIR__."/cache/$curr_url"); 
    exit();
} 
ob_start();
?>

И в самом конце, после закрывающего хтмл:

<?php  
$buffer = ob_get_contents(); 
$fp = fopen(__DIR__."/cache/$curr_url", 'w'); 
fwrite($fp, $buffer);
ob_end_flush(); 
fclose($fp); 
?>

Все файлы сохраняются в папку cache с расширением php или html (смотря как была запрошена страница). И отдаются следующему пользователю из cache без запроса к БД.

Ура, товарищи!

И зря Вы, господа, минусовали ответ Grigory Fedorinov. Ибо он абсолютно правильно предложил использовать basename вместо filename.

Answer 2
$filename=basename($_SERVER["REQUEST_URI"]); //Получаем название страницы без расширения
$filename_md5 = md5($_SERVER["REQUEST_URI"]); //Получаем хеш-код страницы (32-значный уникальный код для страницы) для уникальности страницы в кеше.
// $filename."_".$filename_md5 - Человеко-читаемое и уникальное хранение страницы в кеше
//При записи в кеш в начале страницы пишется html-комментарий с $_SERVER["REQUEST_URI"] если необходимо получить полное расположение страницы на сайте    
if (file_exists(__DIR__."/cache/{$filename."_".$filename_md5}.cache")){
    echo file_get_contents(__DIR__."/{$filename."_".$filename_md5}.cache"); 
    exit();
}
READ ALSO
В чем ошибка в коде с if и else?

В чем ошибка в коде с if и else?

Выводит на экран в любом случае "Введите коректное число1" Код на PHP :

96
Объединение 4 таблиц Laravel MySQL

Объединение 4 таблиц Laravel MySQL

Я начал изучать фреймворк Laravel 58 и столкнулся с проблемой

88
Защита серверной части php

Защита серверной части php

У меня есть серверная часть написанная на php, мне нужно её максимально защитить от XSS и подобных атак

123