Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Cache für statische Dateien

PHP-Cache für statische Dateien

小云云
小云云Original
2017-11-11 13:27:016668Durchsuche

PHP-Datei-Caching wird hauptsächlich verwendet, um den Druck auf den Datenbankserver zu verringern. Das hier erwähnte statische Caching von PHP-Dateien bezieht sich auf statische, direkt generierte Textdateien wie HTML oder XML und deren Neugenerierung bei Aktualisierungen Geeignet für Anwendungen, bei denen sich die Seite nicht wesentlich ändert.

1. Statischer Dateicache
2. Memcache, Redis-Cache
Statischer Cache: Verwenden Sie PHP, um die Daten zusammenzustellen, und schreiben Sie die Daten dann in die Datei.
staticcache.php

<?php
class File{
    private $_dir;//定义一个默认的路径
    const EXT = &#39;.txt&#39;;//定义一个文件名后缀的常量
    public function __construct(){
        $this->_dir = dirname(__FILE__).&#39;/files/&#39;;//获取文件的当前目录,再放到该目录下的files文件夹中,然后赋给$_dir
    }
    //把生成/获取/删除缓存这三个操作封装在cacheData方法中
    public function cacheData($key,$value = &#39;&#39;,$path = &#39;&#39;){
        $filename = $this->_dir.$path.$key.self::EXT;//拼装成一个文件:默认目录、路径、文件名、文件名后缀
        //将value值写入缓存
        if($value !== &#39;&#39;){
        //删除缓存
            if (is_null($value)){
                return @unlink($filename);//unlink删除文件,@忽略警告
            }
            $dir = dirname($filename);
            if(!is_dir($dir)){//如果目录不存在就创建目录,首先要获取这个目录
            mkdir($dir,0777);
        }
        return file_put_contents($filename, json_encode($value));}
        //获取缓存
        if(!is_file($filename)){
        return FALSE;
        }else{
            return json_decode(file_get_contents($filename),true);
        }
    }
}

test.php

<?php
require_once(&#39;./staticcache.php&#39;);
$data = array(
&#39;id&#39; => 1,
&#39;name&#39; => &#39;panda&#39;,
&#39;number&#39; => array(1,7,8)
);
$file = new File();
//获取缓存
if($file->cacheData(&#39;index_cache&#39;)){
    var_dump($file->cacheData(&#39;index_cache&#39;));exit;
    echo "success";
}else{
    echo "error";
}

Nach dem Einstellen der statischen Cache-Zeitoptimierung:
cachetime.php

<?php
class File{
    private $_dir;//定义一个默认的路径
    const EXT = &#39;.txt&#39;;//定义一个文件名后缀的常量
    public function __construct(){
        $this->_dir = dirname(__FILE__).&#39;/files/&#39;;//获取文件的当前目录,再放到该目录下的files文件夹中,然后赋给$_dir
    }
    //把生成/获取/删除缓存这三个操作封装在cacheData方法中
    public function cacheData($key,$value = &#39;&#39;,$cacheTime = 0){//不传cacheTime永久有效
        $filename = $this->_dir.$key.self::EXT;//拼装成一个文件:默认目录、路径、文件名、文件名后缀
        //将value值写入缓存
        if($value !== &#39;&#39;){
//删除缓存
if (is_null($value)){
return @unlink($filename);//unlink删除文件,@忽略警告
}
$dir = dirname($filename);
if(!is_dir($dir)){//如果目录不存在就创建目录,首先要获取这个目录
mkdir($dir,0777);
}
$cacheTime = sprintf(&#39;%011d&#39;,$cacheTime)//规定缓存时间格式,不足11位,则前面补0,方便获取时截取
return file_put_contents($filename, $cacheTime.json_encode($value));//缓存时间与数据拼接
}
        //获取缓存
if(!is_file($filename)){
return FALSE;
}
$contents = file_get_contents($filename);
$cacheTime = (int)substr($contents,0,11);
$value = substr($contents,11);
if($cacheTime !=0 && ($cacheTime + fileatime($filename)<time())){//判断是否过期
unlink($filename);//缓存失效删除文件
return FALSE;
}
return json_decode($value,true);//如果没过期,输出缓存内容
}
}

Cache-Methode zum Entwickeln der Homepage-Schnittstelle

<?php
require_once(&#39;./jsonxml.php&#39;);
require_once(&#39;./db.php&#39;);
require_once(&#39;./cachetime.php&#39;);
$page = isset($_GET[&#39;page&#39;]) ? $_GET[&#39;page&#39;] : 1;
$pageSize = isset($_GET[&#39;pagesize&#39;]) ? $_GET[&#39;pagesize&#39;] : 6;
if(!is_numeric($page)||!is_numeric($pageSize)){
return Response::show(401,&#39;数据不合法&#39;);
}
$offset = ($page - 1) * $pageSize;
$sql = "select * from video where status = 1 order by orderby desc limit ".$offset.",".$pageSize;
//4-4 读取缓存方式开发首页接口
$cache = new File();$videos = array();
if(!$videos = $cache->cacheData(&#39;index_yjp_cache&#39;.$page.&#39;-&#39;.$pageSize)){
echo 1;exit;//如果缓存失效输出1
try{
$connect = Db::getInstance()->connect();
}catch(Exception $e){
return Response::show(403,&#39;数据库链接失败&#39;);
}
$result = mysql_query($sql,$connect);
$videos = array();
while ($video = mysql_fetch_assoc($result)){
$videos[] = $video;
}
if($videos){
$cache->cacheData(&#39;index_yjp_cache&#39;.$page.&#39;-&#39;.$pageSize,$videos,1200);
}
}
if($videos){
return Response::show(200,&#39;首页数据获取成功&#39;,$videos);
}else{
return Response::show(400,&#39;失败&#39;,$videos);
}

Hinweis: Der Dateicache sollte auf die Ablaufzeit der Datei achten
1. Holen Sie sich die Dateierstellung Zeitbeispiel:

$ctime=filectime("chinawinxp.txt");
echo "创建时间:".date("Y-m-d H:i:s",$ctime);

2. Beispiel für das Abrufen der Dateiänderungszeit:

$mtime=filemtime("chinawinxp.txt");
echo "修改时间:".date("Y-m-d H:i:s",$mtime);

fileatime()-Funktion gibt die letzte Zugriffszeit der angegebenen Datei zurück

2.Memcache und Redis-Cache
Starten Sie den Dienst; verbinden Sie den Port, den Cache-Server; den PHP-Betrieb, den PHP-Betrieb und den Mencache-Bedingungen:
1) Installieren Sie die PHP-Erweiterung/Mencache-Erweiterung
2) PHP connect redis service connet(127.0.0.1,6379) ;
Mit mencache service connet('memcache_host',11211) verbinden;
3) Set Cache setzen
4) Get Get Cache
Cache-Zeit einstellen : Schlüsselzeitwert (Zeit) festlegen

Der PHP-Cache umfasst den PHP-Kompilierungscache und den PHP-Datencache. PHP ist eine interpretierte Sprache, die gleichzeitig kompiliert und ausgeführt wird. Der Vorteil dieser Betriebsart besteht darin, dass die Programmänderung sehr komfortabel ist, die Betriebseffizienz jedoch sehr gering ist. Der PHP-Kompilierungscache wurde verbessert, um dieser Situation gerecht zu werden, sodass die PHP-Sprache die Kompilierungsergebnisse des Programms zwischenspeichern kann, solange es einmal ausgeführt wird. Auf diese Weise muss nicht bei jedem weiteren Lauf erneut kompiliert werden, was die Ausführungsgeschwindigkeit von PHP erheblich verbessert.

Verwandte Empfehlungen:

Implementierungscode für den statischen PHP-Cache zur Verbesserung der Website-Zugriffsgeschwindigkeit

ThinkPHP-Statik-Cache-Update-Problem

Thinkphp-Static-Cache-Nutzungsanalyse, Thinkphp-Static-Cache_PHP-Tutorial

Das obige ist der detaillierte Inhalt vonPHP-Cache für statische Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn