- <?php
- header("Content-Type:text/html;charset=utf-8");
- include 'tz.php';
- /**
- * 执行配置文件的压缩
- * Created by PhpStorm.
- * User: saint
- * Date: 2015/3/18
- * Time: 14:25
- */
- if(!defined("SYSTEM_PATH")) define("SYSTEM_PATH", '/data/wwwroot/static/webroot');
- class Compress
- {
- /**
- * @var array 这里是需要处理的配置文件
- */
- public $cfg_files = array(
- 'DEMO1Config.json', #
- );
- /**
- * @var string 文件服务器地址
- */
- public $file_server = '';
- public $cfg_path = '';
- public $temp_path = '';
- public $zip_file = '';
- /**
- * 环境初始化
- */
- public function _InitEnv()
- {
- $this->cfg_path = SYSTEM_PATH . '/metafile';
- if(false == (is_dir( $this->cfg_path) && is_writable($this->cfg_path))) {
- throw new Exception('配置目录不存在或者不可写');
- }
- $this->temp_path = SYSTEM_PATH . '/tmp';
- if(false == (is_dir($this->temp_path) && is_writable($this->temp_path))) {
- throw new Exception('临时配置目录不存在或者不可写');
- }
- if(function_exists('file_get_contents') == false) {
- throw new Exception('file_get_contents函数已禁用');
- }
- if(function_exists('file_put_contents') == false) {
- throw new Exception('file_put_contents函数已禁用');
- }
- if(class_exists('ZipArchive') == false) {
- throw new Exception('找不到ZipArchive');
- }
- }
- public function downloadFiles()
- {
- $start = microtime(true);
- try {
- $this->_InitEnv();
- } catch (Exception $e) {
- echo $e->getMessage();
- exit;
- }
- $file_array = array();
- // 依次从服务器上下载配置文件
- foreach($this->cfg_files as $filename) {
- $tmp_file = $this->temp_path . '/' . $filename;
- $remote_file = $this->file_server . '/' . $filename;
- // 检查本地是否存在临时文件,如果有,则检查这个文件本地文件是否一致
- $is_download = true;
- if(is_file($tmp_file)) {
- if(hash_file('sha256', $tmp_file) == hash_file('sha256', $remote_file)) {
- $is_download = false;
- }
- }
- if($is_download) {
- $contents = file_get_contents($remote_file);
- file_put_contents($tmp_file, $contents);
- }
- $file_array[] = $tmp_file;
- }
- // 对配置文件进行压缩
- try {
- $this->compressFiles();
- } catch (Exception $e) {
- echo $e->getMessage();
- exit;
- }
- $limit = microtime(true) - $start;
- echo '<p>生成压缩文件成功,本次耗时:' . $limit . 's</p>';
- echo '<p>开始替换原来的配置文件</p>';
- $this->replaceFiles();
- // 插入数据库
- echo '<p>替换完毕</p>';
- }
- // 替换原来的文件
- public function replaceFiles()
- {
- // 打开配置目录,创建备份目录
- chdir($this->cfg_path);
- $backup_dir = 'cfg_bak_' . date('Ymd');
- if(is_dir($backup_dir)) {
- rmdir($backup_dir);
- }
- mkdir($backup_dir, 0777);
- array_push($this->cfg_files, $this->zip_file);
- foreach($this->cfg_files as $file_name) {
- $dst_file = $backup_dir . '/' . $file_name;
- if(is_file($file_name)) {
- copy($file_name, $dst_file);
- }
- $new_file = $this->temp_path . '/' . $file_name;
- copy($new_file, $file_name);
- }
- }
- /**
- * 执行压缩文件
- * @param $file_array
- * @throws Exception
- */
- public function compressFiles()
- {
- chdir($this->temp_path);
- $this->zip_file = 'cfg_' . date(('Ymd')) . '.zip';
- $zipClass = new ZipArchive();
- $fp = $zipClass->open($this->zip_file, ZipArchive::CREATE);
- if($fp === true) {
- foreach($this->cfg_files as $file_name) {
- $zipClass->addFile($file_name);
- }
- } else {
- throw new Exception('压缩失败:' . $fp);
- }
- $zipClass->close();
- }
- }
- $obj = new Compress();
- $obj->downloadFiles();
- //该片段来自于http://www.codesnippet.cn/detail/2003201511934.html
来源: http://www.codesnippet.cn/detail/2003201511934.html