You can store the concatenation result in a new CSS file and access it for a certain period until the cache expires.
<?php
if (empty($_GET['files']))
die();
// Configurações
$cacheExpirationInSeconds = 60;
$directoryOfCss = 'C:\xampp\htdocs\frederico\css\';
$cacheFile = $directoryOfCss.'cache-'.str_replace(',', '-', $_GET['files']).'.css';
// Verifica se o arquivo cache existe e se ainda é válido
if (file_exists($cacheFile) && (filemtime($cacheFile) > time() - $cacheExpirationInSeconds)) {
// Lê o arquivo cacheado
$cssContent = file_get_contents($cacheFile);
} else {
// Concatena os arquivos
$cssContent = '';
$files = explode(',', $_GET['files']);
foreach ($files as $oneFile) {
if (file_exists($directoryOfCss.$oneFile.'.css')) {
$cssContent .= file_get_contents($directoryOfCss.$oneFile.'.css');
}
}
// Cria o cache
$cssContent .= '/*Gerado em '.date('d/m/Y H:i:s').'*/';
file_put_contents($cacheFile, $cssContent);
}
header('Content-Type: text/css;X-Content-Type-Options: nosniff;');
echo $cssContent;
One advantage of this approach is that you can delete the cached file programmatically or manually and avoid problems with out-of-date cache in your clients' browsers.
Another solution for your case is to cache the result of the concatenation through some PHP module. In the "PHP: The Right Way" website there is a more detailed explanation . Below is an example of how you would use Memcache.
<?php
if (empty($_GET['files']))
die();
$directoryOfCss = 'C:\xampp\htdocs\frederico\css\';
// Conecta ao Memcache
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
// Monta um identificador para o cache
$key = str_replace(',', '-', $_GET['files']);
// Busca o cache
$cssContent = $memcache->get($key);
// Se não existir o cache, é retornardo o dado original e esse dado é armazenado em cache para as próximas solicitações
if (!$cssContent) {
// Concatena os arquivos
$cssContent = '';
$files = explode(',', $_GET['files']);
foreach ($files as $oneFile) {
if (file_exists($directoryOfCss.$oneFile.'.css')) {
$cssContent .= file_get_contents($directoryOfCss.$oneFile.'.css');
}
}
// Armazena em cache
$expireInSeconds = 300;
$memcache->set($key, $cssContent, false, $expireInSeconds);
}
// Exibe o resultado
echo $cssContent;
// E caso você queira excluir dinamicamente o cache basta executar
$memcache->delete($key);
In Xampp, at least the version I use does not contain Memcache by default, you would have to install it for this code to work.