1. Phar简介
Phar是PHP Archive缩写,将php文件归档到一个文件包。
将一个模块的文件打包成一个phar,这样方便模块整体迁移,只需将phar文件移动过去,其他环境中include即可使用。
类似于java的 .jar 文件。
php 5.3时,为php的C语言扩展,安装php时会默认安装。
在安装目录 bin下面有phar文件,通过 php -m 查看php扩展,也应该能找到。
$ .bin/phar.phar help终端可以直接运行。
2. 创建Phar文件
2.1 修改php.ini配置文件
phar.readonly = 0 这个参数必须设置为0,如果为1,表示phar文档不可写。
phar.require_hash = 1 这个参数为每个phar打包的文件生成一个签名,如果发现签名有问题,则拒绝处理。防止外部注入一些不安全的脚本。
phar.cache_list 允许web server启动时预加载phar文档,提升访问速度。
2.2 创建phar对象
创建my.phar文件
<?php try{ $p = new Phar(dirname(__FILE__) . "my.phar", 0, ‘my.phar‘); } catch (UnexpectedValueException $e) { die(‘Could not open my.phar‘); } catch (BadMethodCallException $e) { echo ‘technically, this cannot happen‘; }使用startBuffering来打开缓冲,对文件修改,使用缓冲的好处是不用每次修改都保存文件,提升了效率。
$p->startBuffering(); $p[‘file.txt‘] = ‘hi‘; $p[‘file2.txt‘] = ‘there‘; $p[‘file3.txt‘] = ‘babyface‘; $p[‘file3.txt‘]->setMetadata(42); $p[‘test/time.php‘] = file_get_contents(‘time.php‘);上面代码用来添加文档,添加了4个文档。最后一个time.php在test目录下面。
2.3 phar文件存根
文件存根是phar最开始运行的一段代码。
用setStub方式来创建
$p->setStub("<?php Phar::mapPhar(‘myphar.phar‘); __HALT_COMPILER();");最后关闭缓冲区
$p->stopBuffering();运行后,会在当前目录生成一个myphar.phar文件。
3. Phar文档使用
phar文档很方便的集成到其他应用程序中。使用时跟单个php文件一样看待,直接 include即可。
一般有下面两种方式:
include ‘myphar.phar‘;这样把phar中所有的文件都引入了。
include ‘phar://myphar.phar/test/time.php‘;这个只把test目录下的time.php文件引入了。
引入后可以直接使用原php文件中变量。
还可以直接读取:
echo file_get_contents(‘phar://my.phar/file.txt‘);这个会输出 hi。