Home  >  Article  >  Backend Development  >  Share the method of caching the PHP website to speed up the opening speed_PHP tutorial

Share the method of caching the PHP website to speed up the opening speed_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:19:05717browse

Notes:
1. The compressed files are cached on the server. Accessing them again reduces re-compression time and CPU usage.
2. By setting the client file cache time to reduce the number of re-requests, it can be reduced by more than 85%.
3. Because the image is already in a compressed format, only the client cache time is set and no compression is performed.

Usage:
1. The server must support gzip and Rewrite functions.
2. Add the following code in the line below "RewriteBase /" in the .htacess file, as shown in the picture
RewriteRule (.*.css$|.*.js$|.*.jpg$|.*.gif $|.*.png$) gzip.php?$1 [L]
3. Upload gzip.php to the root directory
4. Create a cache folder in the root directory to ensure it is readable and writable.

Share the method of caching the PHP website to speed up the opening speed_PHP tutorial

Copy code The code is as follows:

/**
* @author Seraphim
* @copyright 2012
*/
//
function sendheader($last_modified , $p_type, $content_length = 0)
{
// Set the client cache validity time
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 15360000) . "GMT");
header("Cache-Control: max-age=315360000");
header("Pragma: ");
//Set the last modification time
header("Last-Modified: " . $last_modified);
//Set file type information
header($p_type);
header("Content-Length: " . $content_length);
}
define('ABSPATH', dirname(__file__) . '/');
$cache = true;
$cachedir = 'cache/'; //The directory where the gz file is stored, ensure it is writable
if (empty($_SERVER['QUERY_STRING']))
exit();
$gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
if (empty ($gzip))
$cache = false;
$key = array_shift(explode('?', $_SERVER['QUERY_STRING']));
$key = str_replace('../' , '', $key);
$filename = ABSPATH . $key;
$symbol = '_';
$rel_path = str_replace(ABSPATH, '', dirname($filename));
$namespace = str_replace('/', $symbol, $rel_path);
$cache_filename = ABSPATH . $cachedir . $namespace . $symbol . basename($filename) .
'.gz'; / /Generate gz file path
$ext = array_pop(explode('.', $filename)); //Judge file type information based on suffix
$type = "Content-type: text/html"; // Default file type
switch ($ext)
{
case 'css':
$type = "Content-type: text/css";
break;
case ' js':
$type = "Content-type: text/javascript";
break;
case 'gif':
$cache = false;
$type = "Content-type : image/gif";
break;
case 'jpg':
$cache = false;
$type = "Content-type: image/jpeg";
break;
case 'png':
$cache = false;
$type = "Content-type: image/png";
break;
default:
exit();
}
if ($cache)
{
if (file_exists($cache_filename))
{ // If gz file exists
$mtime = filemtime($cache_filename);
$ gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER ['HTTP_IF_MODIFIED_SINCE'])) ==
$gmt_mtime))
{
// Consistent with the file modification date in the browser cache, returns 304
header("HTTP/1.1 304 Not Modified ");
// Send client header
header("Content-Encoding :gzip");
sendheader($gmt_mtime, $type);
}
else
{
// Read gz file output
$content = file_get_contents($cache_filename);
// Send client header
sendheader($gmt_mtime, $type, strlen($content));
header("Content-Encoding: gzip");
// Send data
echo $content;
}
}
else
if (file_exists($filename))
{ // There is no corresponding gz file
$mtime = mktime();
$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
// Read the file
$content = file_get_contents($filename);
// Remove the blank part
// $content = ltrim($content);
// Compress the file content
$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);
//Send client header
sendheader($gmt_mtime, $type, strlen($content));
header("Content-Encoding: gzip");
// Send data
echo $content;
// Write file
file_put_contents($cache_filename, $content);
}
else
{
header("HTTP/1.0 404 Not Found");
}
}
else
{ // Process output in Gzip mode. The principle is basically the same as above
if (file_exists($filename))
{
$mtime = filemtime($filename);
$gmt_mtime = gmdate('D, d M Y H:i:s', $ mtime) . ' GMT';
if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
$gmt_mtime))
{
// Consistent with the file modification date in the browser cache, returns 304
header("HTTP/1.1 304 Not Modified");
// Send client header
sendheader ($gmt_mtime, $type, strlen($content));
header("Content-Encoding :gzip");
}
else
{
// Read file output
$content = file_get_contents($filename);
// Send client header
sendheader($gmt_mtime, $type, strlen($content));
// Send data
echo $ content;
}
}
else
{
header("HTTP/1.0 404 Not Found");
}
}
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/325405.htmlTechArticleNote: 1. The compressed file is cached on the server, and accessing it again reduces recompression time and CPU usage. . 2. Reduce the number of re-requests by setting the client file cache time...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn