Cache um único arquivo PHP com parâmetros

0

Portanto, eu construo um script PHP que recebe alguns dados e os fornece como uma API. Os dados não mudam muito, mas o script é executado toda vez que é solicitado. Existe uma maneira de dizer ao Apache para armazenar em cache os resultados deste arquivo, para que ele não seja executado toda vez que alguém o solicitar? Importante é fornecer saída de acordo com os parâmetros de URL, para que file.php?param=test1 produza algo diferente do que file.php?param=test2 .
O Apache (especialmente o Apache2) pode fazer isso, ou devo apenas implentá-lo em meu script?

    
por Kimmax 19.05.2014 / 16:33

2 respostas

0

Eu mesmo resolvi construindo um simples PHP-Script para armazenar os dados em cache. Vou adicioná-lo aqui para conclusão.

<?php

    function CheckCache($request)
    {
        if(file_exists("./cache/" . escapeFileName($request)))
        {
            if ((time()-filemtime("./cache/" . escapeFileName($request)) > 12 * 3600) != true) {
                return true;
            }
        }

        return false;
    }

    function ReciveFromCache($request)
    {
        return file_get_contents("./cache/" . escapeFileName($request));
    }

    function SetCache($request, $staticContent)
    {
        $update = (array)json_decode($staticContent, true);
        $update['server']['cached'] = true;
        file_put_contents("./cache/" . escapeFileName($request), json_encode($update));
    }

    function escapeFileName($filename)
    {
        return preg_replace('/[^A-Za-z0-9_\-]/', '_', $filename);
    }
?>

Inclua na sua parte principal. A idade máxima do cache é definida em 12 * 3600 , em que 3600 é o tempo máximo em segundos (uma hora = 3600 segundos * 12 = 12 horas). estou usando assim:

function reciveFromRiot($reqURL, $urlParams = "")
{
    $api_key = "xxxx-xxxx-xxxx-xxxx";
    $request = $reqURL . "?$urlParams&api_key=" . $api_key;

    if(CheckCache($request))
    {
        $response = ReciveFromCache($request);
    }
    else
    {
        $response = file_get_contents("https://prod.api.pvp.net/api/lol/" . $request);
        $responsecode = explode(" ", $http_response_header[0])[1];

        if($responsecode != "200")
            return false;

        SetCache($request, $response);
    }

    return json_decode($response);
}

Vou deixar como é um exemplo para a API do Riot Game .
Nota que precisa haver uma pasta cache no mesmo local que o script.

    
por 19.05.2014 / 19:55
0

Você poderia colocar os dados que não mudam muito em uma variável da página pai e, quando o script é chamado, ele apenas executa o que precisa? Processe seu pequeno script via AJAX para que a página não seja atualizada toda vez?

    
por 19.05.2014 / 16:38