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: