Shell脚本中实现更新PHP5
我很迷恋Shell,很喜欢看着字符在黑色的Console界面中跳跃着,奇怪的是,我居然没有因此成为一个Linux/Unix程序员,而只是个写CGI程序的倒霉蛋。大家都是怎么称呼“PHP程序员”的?对了——草根~嗯,在土里埋的太久,说不定哪天就烂掉了咯!
可能是被Windows惯坏了,实在不想换个OS,还好有Cygwin,MinGW…之类的东西,适当的时候,可以拿出来装下B,自我安慰一下~
我总喜欢从windows.php.net下载最新的snapshot,不是我想体验最新的功能,只是强迫症的关系-,-。我机器上的所有软件,程序都是最新的,绝大部分都还挂着beta标签,甚至有一些是直接从SVN,Git上面拖下来的trunk版本,想想真是变态。如果你每天都爬上这些网站,人肉检查一下是不是有新的版本发布,以此满足一下自己变态的心理,那真是要疯掉了。
能让机器干的事情,就不要手工去做,是吧!下面这段代码会自动去check最新的snapshot,解压到你想要的目录。然后呢?建个cronjob挂上去,就可以去找新的乐子了~
代码中下载的是,NonetheadsafeVC9版本,注意替换成自己能用的版本。需要强制更新的话,加上“–force”参数。
最后一行使用icacls重置了php5-nts目录下文件的权限(注意路径的写法,icacls是windows自己的程序),因为cygwin会把NTFS的权限搞的巨恶心。
PS:非CGI/FCGI安装模式,记得关掉WebServer。
#!/bin/bash INSTALL_PATH="/cygdrive/d/php5-nts" BUILD_TIME_FILE="/cygdrive/d/php5-nts/build-time" PACKAGE_URL="http://windows.php.net/downloads/snaps/php-5.3-nts-win32-VC9-x86-latest.zip" functionuprint{ if["${1:0:1}"="-"];then echo$1"#$2" else echo"#$1" fi } ##Ifunzipavailable? UNZIP=`whichunzip2>/dev/null` if[-z$UNZIP];then uprint"Couldnotfindunzip,pleaseinstall." exit1 fi ##Testifbuild-timefileexists,ifnot,createit if[!-f$BUILD_TIME_FILE];then uprint-n"Buildtimefiledoesnotexists,created..." touch$BUILD_TIME_FILE echo-e"\e[32m[OK]\e[0m" fi ##Getcurrentbuildtime CURRENT_BUILD_TIME=`cat$BUILD_TIME_FILE` ##Getlatestbuildtime LATEST_BUILD_TIME=`curl--silenthttp://windows.php.net/snapshots/|\ grep"php-5.3-nts-VC9-x86"|\ grep"VC9x86NonThreadSafe("|\ grep-o"(.*)"|\ sed's/[()]//g'` ##Anyupdate? package=`basename$PACKAGE_URL` if["$CURRENT_BUILD_TIME"!="$LATEST_BUILD_TIME"];then uprint-e"Newversionavailable,buildtime:\e[36m$LATEST_BUILD_TIME\e[0m" else if["$1"!="--force"];then uprint"Youareusingthelatestsnapshotversion." exit0 else uprint-e"\e[31mForcetoupdatelocalphpversion.\e[0m" fi fi ##Deleteiffilealreadyexists ls$package>/dev/null2>&1 iftest$?-eq0;then uprint-n"Performing:rm-f\`ls$package\`..." rm-f`ls$package` echo-e"\e[32m[OK]\e[0m" fi ##Getlatestphp5binarypackage uprint-n"Downloadinglatestphpbinarypackage..." wget-q$PACKAGE_URL echo-e"\e[32m[OK]\e[0m" ##Extracting if[-f$package];then #killphpprocesses forphp_pidin`ps-as|grepphp|awk'{print$1}'` do kill-9$php_pid done uprint-n"Extracting..." unzip-o$package-x-d$INSTALL_PATH>/dev/null2>&1 echo-e"\e[32m[OK]\e[0m" echo$LATEST_BUILD_TIME>$BUILD_TIME_FILE uprint-n"Cleaningup..." rm-f$package echo-e"\e[32m[OK]\e[0m" fi ##Fixedcygwinpermissions icaclsD:/php5-nts/reset/T>/dev/null #vim:setexpandtabtabstop=4shiftwidth=4: