日期:2014-05-16  浏览次数:20583 次

Phar:PHP文件归档

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。

地址:http://blog.csdn.net/yonggang7/article/details/24142725