`
victorwmh
  • 浏览: 213653 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

用PHP写的一个web升级脚本

    博客分类:
  • php
 
阅读更多

管理web项目一直是件很困难的事情,程序使用时间越长里面的spam文件也越多。如何保证web目录的清洁是个重要的工作,结合这个脚本和subversion的管理功能,可以方便你的日常升级管理。

 

<?php

/**
 * Website upgrade script
 * Author: victorwmh
 * Email: victorwmh@gmail.com
 * Date: 2011-08-23
 *
 * Description:
 * $argc and $argv is default variables of CLI mode.
 * $argc is int, $argv is array. $argv[0] is self file name.
 */

$ublocal = "/home/df3c/upgrade/bundles/";
$uapplocal = "/home/df3c/web";

if ($argc < 2) exit('no argument.');
$ubname = $argv[1];

$ufox = new UpgradeFox();
$ufox->init($uapplocal, $ublocal, $ubname);
$ufox->upgrade();


/**
 * Upgrade-fox class.
 * @author victorwmh
 *
 */
class UpgradeFox {

	/* update bundle name */
	private $bname = '';

	/* update bundle location */
	private $blocal = '';

	/* application location for upgrade */
	private $applocal = '';

	/* bundle extract directory */
	private $extdir = '';

	/* all directory of boundle */
	private $directories = array();

	/* all file of boundle */
	private $files = array();


	/**
	 * Initialization basic information.
	 * @param string $uapplocal
	 * @param string $ublocal
	 * @param string $ubname
	 */
	public function init($uapplocal, $ublocal, $ubname) {
		$this->applocal = rtrim($uapplocal, '/');
		$this->bname = $ubname;
		$this->blocal = rtrim($ublocal, '/');
		$this->extdir = rtrim($this->blocal . '/' . $this->bname, '.zip');
	}


	/**
	 * Update files in the bundle and delete files in the list for dellist.txt.
	 */
	public function upgrade() {
		ob_start();
		echo "Upgrade processing...\n";
		echo "Upgrade will to overwrite or remove a files.\n";
		echo "Are you want to continue? press (y or n):";
		ob_flush();

		if (trim(fgets(STDIN)) != 'y') {
			exit("Canceled.\n\n");
		};

		echo "Check: ";
		ob_flush();

		if ($this->check() === FALSE) {
			exit("bundle not exist.\nUpgrade failure.\n\n");

		} elseif($this->check() == 'zip') {
			echo "Ok!\nExtract bundle: ";
			ob_flush();
		    $this->extract();
		}

		$this->uverify();

		echo "Ok!\nUpdate files: ";
        ob_flush();
        $this->update();

        echo "Ok!\nClean files: ";
        ob_flush();
        $this->clean();

        echo "Ok!\nFinished.\n\n";
        ob_end_flush();
	}


	/**
	 * Check upgrade bundle.
	 */
	private function check() {
		if (file_exists($this->blocal . '/' . $this->bname)) {
			if (preg_match('/(\.zip)+$/', $this->bname)) {
				return 'zip';
			} elseif(is_dir($this->blocal . '/' . $this->bname)) {
                return 'dir';
			} else {
				return FALSE;
			}
		} else {
			return FALSE;
		}
	}


	/**
	 * Extract upgrade bundle.
	 */
	private function extract() {
		$zip = new ZipArchive();
		$zip->open($this->blocal . '/' . $this->bname);
		if (! $zip->extractTo($this->blocal)) {
			$zip->close();
			exit("extract is failure.\nUpgrade failure.\n\n");
		}
	}


	/**
	 * Update files in the bundle.
	 */
	private function update() {
		$this->sortDirFile($this->extdir);
		$this->mkDirAppend();
		$this->uoverwrite();
		$this->udelete();
	}


	/**
	 * Verify bundles.
	 */
	private function uverify() {
        $ufoxfile = $this->extdir . '/ufox-clean.ini';
        if ( ! file_exists($ufoxfile)) {
        	exit("bundle rootdir is not ufox-clean.ini\n");
        }
	}

	/**
	 * Delete trash files of applocal.
	 */
	private function udelete() {
		$ufoxfile = $this->extdir . '/ufox-clean.ini';

		$delfiles = $this->getFileContent($ufoxfile);
		foreach ($delfiles as $file) {

			$file = preg_replace('/\s.*/', '', $file);
			$tmp = $this->applocal . '/' . $file;

			if ('' == $file) {
				continue;
			} elseif (file_exists($tmp)) {
				is_dir($tmp) ? $this->rmdir($tmp) : unlink($tmp);
			}
		}

		unlink($this->applocal . '/ufox-clean.ini');
	}


	/**
	 * add or overwrite files.
	 */
	private function uoverwrite() {
		$bdirname = rtrim($this->bname, '.zip');

    	foreach ($this->files as $file) {
    		$tmp = $this->applocal . '/' . substr($file, strpos($file, $bdirname)+strlen($bdirname));
    		copy($file, $tmp);
    	}
	}


	/**
	 * Clean extract files.
	 */
	private function clean() {
		$this->rmdir($this->extdir);
	}


	/**
	 * Get contents of the file.
	 * @param string $file
	 * @return array
	 */
	private function getFileContent($file) {
		/* Line breaks for each OS. win:“\r\n”,0x0D0A; linux:“\n”,0x0A; mac:"\r",0x0D; */
		if (file_exists($file)) {
			$contents = file_get_contents($file);

			if (strpos($contents, "\r\n") > 0) {
				$separator = "\r\n";
			} elseif (strpos($contents, "\n") > 0) {
				$separator = "\n";
			} elseif (strpos($contents, "\r") > 0) {
				$separator = "\r";
			}
			return explode($separator, $contents);

		} else {
			return FALSE;
		}
	}


	/**
	 * sort all file and sub directory of dir.
	 * @param string $dir
	 */
	private function sortDirFile($dir) {
        $handle = opendir($dir);
        if ($handle) {
            while (($name = readdir($handle)) !== false) {
                if ($name === '.' || $name === '..') continue;
                $tmp = realpath($dir . '/' . $name );
                if (is_dir($tmp)) {
                    $this->directories[] = $tmp;
                    $this->sortDirFile($tmp);
                } else {
                	$this->files[] = $tmp;
                }
            }
            closedir($handle);
        }
    }


    /**
     * mk appended sub directories of bundle.
     */
    private function mkDirAppend() {
    	$bdirname = rtrim($this->bname, '.zip');

    	foreach ($this->directories as $dir) {
    		$dir = substr($dir, strpos($dir, $bdirname)+strlen($bdirname));
    		$tmp = $this->applocal . '/' . $dir;
    		if (! file_exists($tmp)) {
    			mkdir($tmp);
    		}
    	}
    }


	/**
	 * Remove directory.
	 * @param string $dir
	 */
	private function rmdir($dir) {
        if (! is_dir($dir)) return false;
        $handle = opendir($dir);
        while (($file = readdir($handle)) !== false) {
            if ($file !== '.' && $file !== '..') {
                $tmp = $dir . '/' . $file;
                is_dir($tmp) ? $this->rmdir($tmp) : @unlink($tmp);
            }
        }
        closedir($handle);
        return rmdir($dir);
    }

}

 

 

 

 

分享到:
评论

相关推荐

    phpweb升级包

    "phpweb升级包"指的是针对该系统的一系列更新补丁,用于优化系统性能、修复已知问题、增加新功能或者提升安全性。从描述中可以看出,这个升级包包含了多个不同日期的版本,比如20090830、20090514等,这些可能代表...

    phpweb手动升级方法

    在IT行业中,PHPWeb是一个基于PHP和MySQL的开源内容管理系统,用于快速构建网站。当我们谈论“phpweb手动升级方法”时,我们指的是通过手动步骤更新现有的PHPWeb系统到最新版本,以获取最新的功能、安全补丁和性能...

    phpweb正版升级

    【PHPWEB正版升级】是一个针对PHPWEB系统的更新过程,它涉及到网站管理后台的优化与功能增强,确保用户能够获得最新的安全补丁、性能提升以及新功能的体验。PHPWEB是一款基于PHP语言开发的网站内容管理系统,它为...

    PHPweb升级补丁+升级包+升级说明

    PHPweb 是一个基于 PHP 和 MySQL 开发的开源网站内容管理系统,它为用户提供了方便的建站工具和管理功能。在 PHPweb 的使用过程中,适时的升级对于系统的安全性和功能完善至关重要。"PHPweb 升级补丁+升级包+升级...

    phpweb1.0.5升级到2.0.5升级包(后台自动升级)

    对于PHPWeb这款基于PHP构建的网站管理系统,从1.0.5版本升级到2.0.5版本的升级过程是一个关键的操作,旨在引入新的功能、修复已知问题以及增强系统的整体性能。下面将详细解释这个升级过程中的关键知识点。 首先,...

    PHPWEB升级压缩包 20120220

    【PHPWEB升级压缩包 20120220】是一个专为PHPWEB系统设计的更新包,它是在2012年2月20日由官方提供给用户进行系统升级的。PHPWEB是一款基于PHP语言开发的网站内容管理系统(CMS),其核心功能包括网站内容管理、用户...

    phpweb升级包 所有升级包汇总 包括10月最新的

    在本文中,我们将详细探讨PHPWeb升级包的关键知识点,包括其重要性、升级流程以及可能涉及的技术点。 1. **系统性能优化**:每次升级都可能包含性能改进的代码,例如更快的数据库查询、更高效的缓存机制或者优化的...

    phpweb最新升级包20111209

    【PHPWeb最新升级包20111209】是一个针对PHPWeb系统的更新补丁,发布于2011年12月9日。PHPWeb是一个基于PHP语言开发的内容管理系统(CMS),它旨在为用户提供便捷、高效且功能丰富的网站构建工具。这次升级包主要...

    PHPWEB升级补丁+截止至2.0.15最新升级包+内附升级方法

    PHPWEB是一款基于PHP和MySQL开发的开源网站管理系统,主要...综上所述,升级PHPWEB系统是一个涉及多个环节的过程,需要细心操作并遵循官方提供的指导。确保每个步骤都按照说明进行,以保证升级的成功和系统的稳定性。

    PHPWEB建站系统免验证安装和升级补丁

    总之,PHPWEB建站系统的免验证安装和升级补丁提供了一种快速便捷的方式来搭建和维护网站,但同时也需要用户谨慎处理,确保安全性和稳定性。在享受便利的同时,我们不应忽视潜在的风险,务必采取适当的防护措施。

    phpweb手机版V1.9

    **PHPWeb手机版V1.9** 是一个专为移动端设计的网站内容管理系统,基于PHP语言开发,具有良好的可扩展性和易用性。该系统旨在帮助用户快速构建适应手机和平板等移动设备的网站,提供便捷的后台管理功能,使得内容发布...

    PHPWEB-反馈模块

    PHPWEB-反馈模块是专为PHPWEB框架设计的一个组件,用于填补部分成品网站在功能上的空白,使用户可以方便地提交反馈。通过手动添加此模块,我们可以增强网站的互动性和用户体验,同时也有利于网站的持续改进和优化。 ...

    VB Webserver (BigFox 升级版本)

    VB Webserver(BigFox 升级版本)是一个基于Visual Basic(VB)开发的Web服务器软件。这个升级版在原版BigFox的基础上进行了界面优化和源码改进,旨在提供更高效、稳定且用户友好的Web服务解决方案。以下是关于VB ...

    完整版 web应用开发 web网站建设实用教程 第6-3讲 PHP web开发环境(共152页).ppt

    总的来说,PHP不仅是一门实用的编程语言,更是一个丰富的生态系统,涵盖了从简单的网站到复杂的企业级应用的各种开发需求。通过深入学习和实践,开发者可以利用PHP来创建高效、稳定且功能丰富的Web应用程序。

    phpweb安装宝

    【PHPWeb安装宝】是一个专为服装企业生产打造的便捷网站搭建工具,它基于PHP语言,简化了网站的建设和管理过程。PHPWeb以其易用性和高效性,深受开发者和企业用户的喜爱。通过这个压缩包,用户可以快速地构建出符合...

    PHPWEB代理平台

    【PHPWEB代理平台】是一个基于PHP技术构建的免费网站代理平台,它专为用户提供网站内容的代理服务。这个平台的独特之处在于其真正具备更新和升级的功能,确保用户能够享受到不断优化的服务体验。以下是对该平台及其...

    PHPWEB网站源码

    10. **effect**:这看起来像是一个文件夹,可能包含了CSS样式、JavaScript脚本、图片或其他静态资源,它们共同为网站提供视觉效果和交互功能。 通过这个PHPWEB网站源码,开发者不仅可以学习到PHP语言基础、MVC架构...

    dbvphp是一个数据库版本控制Web应用具有schema管理修订脚本等功能

    dbvphp是一个开源的PHP工具,它允许开发团队通过Web界面对数据库进行版本控制操作。这个工具的核心理念是将数据库的变更视为代码的一部分,使得数据库的升级和维护与应用程序的代码版本控制保持一致。dbvphp支持多种...

    phpweb 2012

    3. **Web内容管理系统(CMS)**:作为一个企业网站解决方案,PHPWeb 2012包含了一个CMS,允许非技术人员通过用户友好的界面更新网站内容,如添加新产品、修改新闻动态等。 4. **模板系统**:为了适应不同的企业需求...

Global site tag (gtag.js) - Google Analytics