服务器定时执行的脚本文件 cron.php 用以生成定时缓存数据
<?php
/*学习要点: 定时读取缓存方式
1.掌握如何编辑定时脚本任务 Crontab--->生成静态文件数据
2.理解服务器如何提前准备数据 HTTP请求---->服务器----->读取缓存
*/
//让crontab定时执行的脚本程序 */5 * * * * /usr/bin/php data/www/app/cron.php 每5分钟执行一次该cron.php脚本
require_once "./db.php";
require_once "./file.php";
//分页显示数据 偏移量
$page = isset($_GET['page'])?$_GET['page']:1;
$pagesize = isset($_GET['pagesize'])?$_GET['pagesize']:10;
$offset = ($page-1)*$pagesize;
$sql = "select * from sys_role order by 'name' desc limit {$offset},{$pagesize}";
//捕获异常
try{
//连接数据库
$db = Db::getInstance()->connect();
}catch (EXception $e){
//捕捉错误,并生成错误日志文件
file_put_contents('./logs/'.date('y-m-d').'txt',$e->getMessage());
return;
}
// 查询数据库
$recordset = $db->query($sql);
$recordset->setFetchMode(PDO::FETCH_ASSOC);
$result = $recordset->fetchAll();
$file = new File;
if($result){
$file->cacheData('index_text',$result);
}else{
file_put_contents('./logs/'.date('y-m-d').'txt','无相关数据');
return;
}
包含的数据库类文件 db.php
<?php
class Db
{
//拥有一个保护类实例的静态成员变量
static private $_instance;
static private $_connectSource;
const HOST='mysql:host=localhost;dbname=rht-test';
const USER='root';
const PASS='root';
//构造方法需要标记为非 public (防止外部使用new操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化
private function __construct()
{
}
//拥有一个访问这个实例的公共静态方法
public static function getInstance()
{
//判断变量是否实例化
if(!(self::$_instance instanceof self)){
self::$_instance = new self();
}
return self::$_instance;
}
//防止克隆
private function __clone()
{
trigger_error("Can't clone object",E_USER_ERROR);
}
//连接数据库
public function connect()
{
self::$_connectSource = new PDO(Db::HOST,Db::USER,Db::PASS);
if(!self::$_connectSource){
throw new Exception("mysql connect error");
//die("mysql connect error".mysql_error());
}
self::$_connectSource->exec("set names utf8");
return self::$_connectSource;
}
}
// //连接数据库
// $db = Db::getInstance()->connect();
// // 查询数据库
// $recordset = $db->query("select * from sys_role");
// $recordset->setFetchMode(PDO::FETCH_ASSOC);
// $result = $recordset->fetchAll();
// echo "<pre>";
// var_dump($result);
包含的生成静态缓存文件类文件 file.php
<?php
class File
{
private $_dir;
const EXT = '.txt';
public function __construct()
{
$this->_dir = dirname(__FILE__).'\files\/';
}
public function cacheData($path='',$value='',$cacheTime=0)
{
$filename = $this->_dir.$path.self::EXT;
if($value !==''){
//删除静态缓存文件
if(is_null($value)){
return @unlink($filename);
}
//dirname() 返回路径中的目录部分 D:\phpstudy_pro\WWW\test\files
$dir = dirname($filename);
if(!is_dir($dir)){ //判读文件目录是否存在
mkdir($dir,0777);
}
//格式化的字符串写入一个变量中 将缓存失效时间写入文件中
$cacheTime = sprintf('%011d',$cacheTime);
//file_put_contents() 写入文件内容
return file_put_contents($filename,$cacheTime.json_encode($value));
}
//读取静态文件内容
if(!is_file($filename)){//判断静态文件是否存在
return false;
}else{
//file_get_contents() 读取文件内容
$connects = file_get_contents($filename);
//将缓失效时间截取
$cacheTime = substr($connects,0,11);
//获取缓存内容
$value = substr($connects,11);
//根据 生成文件时间+缓存文件时间 < 当前时间 条件成立则删除缓存文件
if($cacheTime !=0 && $cacheTime+fileatime($filename) < time()){
unlink($filename);
return false;
}
return json_decode($value,true);
}
}
}
// $file = new File;
// //测试数据
// $arr = array(
// 'a'=>11111,
// 'b'=>3333
// );
//写入缓存
// $file->cacheData('test',$arr,120);
// //读取文件内容
// echo "<pre>";
// var_dump($file->cacheData('test'));
//删除静态缓存文件
// var_dump($file->cacheData('test',NULL));