在公司做了一个多月,发现由thinkPHP的缓存造成了很多问题,代码发布到线上由于运维人员没有及时删除缓存,出现了各种坑爹的问题,所以想出了写一个远程删除缓存的方案,如果代码上线之后运维人员忘记删除缓存(Runtime目录)可以由开发人员手动调研代码删除,比较适合小型的系统(我想大型的也不会用tp吧)。代码参考了一些网上的
<?php
/*用于自住管理线上环境的模块*/
namespace Mgr\Controller;
use Think\Controller;
class MgrController extends Controller{
function _initialize(){
echo header("Content-type: text/html; charset=utf-8");
}
/*清空目录*/
private function deldir($dir)
{
//先删除目录下的文件:
$dh = opendir($dir);
while ($file = readdir($dh)) {
if ($file != "." && $file != "..") {
$fullpath = $dir . "/" . $file;
if (!is_dir($fullpath)) {
unlink($fullpath);
} else {
$this->deldir($fullpath);
}
}
}
}
/*清空Runtime目录并且不删除日志*/
public function ClearRuntime(){
/*获得上次操作的时间*/
$Prev_Clear_Oper_Time=S('Prev_Clear_Oper_Time');
if($Prev_Clear_Oper_Time){
/*上次操作时间存在*/
$diff=time()-$Prev_Clear_Oper_Time;
echo '上次操作距离现在'.$diff.'秒<br/>';
}
try {
$this->ClearCache();
$this->ClearData();
$this->ClearTemp();
}
catch(Exception $e) {
echo '操作失败';
var_dump($e);
}
echo '操作成功';
/*设置操作时间*/
S('Prev_Clear_Oper_Time',time());
}
/*清空模板缓存目录*/
public function ClearCache(){
try{
$this->deldir(CACHE_PATH);
}catch(Exception $e){
echo '删除模板缓存失败<br/>';
var_dump($e);
}
echo '删除模板缓存成功<br/>';
}
/*清空应用数据目录*/
public function ClearData(){
try{
$this->deldir(DATA_PATH);
}catch(Exception $e){
echo '删除应用数据失败<br/>';
var_dump($e);
}
echo '删除应用数据成功<br/>';
}
/*清空应用缓存目录*/
public function ClearTemp(){
try{
$this->deldir(TEMP_PATH);
}catch(Exception $e){
echo '删除应用缓存失败<br/>';
var_dump($e);
}
echo '删除应用缓存成功<br/>';
}
/*清空应用日志目录*/
public function ClearLog(){
try{
$this->deldir(TEMP_PATH);
}catch(Exception $e){
echo '删除应用日志失败<br/>';
var_dump($e);
}
echo '删除应用日志成功<br/>';
}
}