php脚本有着非常强大的库支持,可以轻松做出特殊强大的程序。php不仅仅可以搭建各种各样的网站系统、平台系统,还可以开拓基于掌握台运行的程序。不过利用php开拓的掌握台程序在利用的时候须要担保包含库文件的相对路径构造,这个在利用上不是很方便。如果有一个方法可以把全体php项目都变成一个php文件就好了。
实在php自身支持一种叫做phar的打包办法,可以利用自带的Phar工具将我们项目里的所有文件都打包到一个文件里面,这就很好地办理了我们的需求了。
2. 编码转换器我们先利用php开拓一个编码转换器,支持字符串的MD5哈希加密、BASE的编码/解码、URL的编码/解码的功能。
只看需求大家都知道了,这些功能都是php内建的函数可以实现的功能,我们须要做的便是把它们封装一下而已。
2.1 lib/TFEncoder.inc.php
编码工具,用友实现需求的各种编码、解码的功能。
namespaceTFPHP\Demo;classTFEncoder{privatestring$CRLF;publicfunction__construct(){$this->CRLF="\n";}publicfunctionmd5(string$org):string{returnmd5($org);}publicfunctionbase64(string$org,bool$decode=false):string{if($decode){returnbase64_decode($org);}returnbase64_encode($org);}publicfunctionurl(string$org,bool$decode=false):string{if($decode){returnurldecode($org);}returnurlencode($org);}publicfunctionprintLine($org){echo$org.$this->CRLF;}publicfunctiondumpLine($org){var_dump($org);}}
2.2 TFEncoder.php
入口程序,通过调用TFEncoder工具的方法实现需求里面的那些编码、解码功能。
useTFPHP\Demo\TFEncoder;include_once('lib/TFEncoder.inc.php');$method=$_SERVER['argv'][1];$origin=$_SERVER['argv'][2];$myEncoder=newTFEncoder();switch($method){case"md5":$myEncoder->printLine($myEncoder->md5($origin));break;case"b64e":case"base64encode":$myEncoder->printLine($myEncoder->base64($origin));break;case"b64d":case"base64decode":$myEncoder->printLine($myEncoder->base64($origin,true));break;case"ue":case"urlencode":$myEncoder->printLine($myEncoder->url($origin));break;case"ud":case"urldecode":$myEncoder->printLine($myEncoder->url($origin,true));break;case"-V":case"--version":print"Copyright(C)2012FreeSoftwareFoundation,Inc.Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.";break;default:print"Usage:TFEncoder[method][origin]method:md5-MD5b64e,base64encode-BASE64encodeb64d,base64decode-BASE64decodeue,urlencode-URLencodeud,urldecode-URLdecodeFormoreinformation,pleasesee:<http://tongfu.net/demo/tfencoder>.";break;}
默认Phar打包功能的关闭的,我们须要到php.ini里面打开它。找到php.ini里面的Phar这一块,将phar.readonly改成Off即可。
4. 利用Phar打包
现在我们利用Phar工具把TFEncoder项目打包一下。
4.1 TFEncoder_Phar.php
$currDir=__DIR__."/";$physicalDirRoot=__DIR__."/";$pharSaveFilePath=$physicalDirRoot."TFEncoder.phar";$pharEntryFilePath="TFEncoder.php";$myPhar=newPhar($pharSaveFilePath);$myPhar->addEmptyDir("lib/");$myPhar->addFile($physicalDirRoot."lib/TFEncoder.inc.php","lib/TFEncoder.inc.php");$myPhar->addFile($physicalDirRoot."TFEncoder.php","TFEncoder.php");$myPhar->compressFiles(Phar::GZ);$myPhar->stopBuffering();$myPhar->setStub($myPhar->createDefaultStub($pharEntryFilePath));
4.2 讲解
$pharSaveFilePath便是打包完成后的phar程序包的保存路径。$pharEntryFilePath是phar程序包的入口程序文件,这个文件是程序包里的路径不是本地物理路径,运行程序包的时候会自动调用这个程序文件。addEmptyDir方法可以在程序包里建立文件夹,如果要放入程序包的程序文件的目录构造是在子目录下面则必须要利用这个方法先在程序包里面建立子目录。addFile方法的第一个参数是要放入程序包里的程序文件确当地物理路径,第二个参数是保存在程序包里的路径。4.3 打包
现在可以利用TFEncoder_Phar.php打包TFEncoder项目了。
5. 总结
可以看到我们利用php的phar打包工具可以制作一些常用的命令行程序,这些程序利用phar打包之后可以很方便的进行分享和支配了。
https://m.tongfu.net/home/35/blog/512905.html