Heim  >  Artikel  >  Backend-Entwicklung  >  Phar:PHP文件存档

Phar:PHP文件存档

WBOY
WBOYOriginal
2016-06-13 11:55:051761Durchsuche

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文件

<?phptry {    $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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:die 揭示的消息都去哪了Nächster Artikel:PHP转义符有关问题