PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
本文实例讲述了PHP开发之归档格式phar文件概念与用法。分享给大家供大家参考,具体如下:
一个php应用程序往往是由多个文件构成的,如果能把他们集中为一个文件来分发和运行是很方便的,这样的列子有很多,比如在window操作系统上面的安装程序、一个jquery库等等,为了做到这点php采用了phar文档文件格式,这个概念源自java的jar,但是在设计时主要针对PHP的Web环境,与JAR归档不同的是Phar归档可由PHP本身处理,因此不需要使用额外的工具来创建或使用,使用php脚本就能创建或提取它。phar是一个合成词,由PHP和Archive构成,可以看出它是php归档文件的意思。
关于phar的官网文档请见http://php.net/manual/zh/book.phar.php,本文档可以看做和官网文档互为补充
phar归档文件有三种格式:tar归档、zip归档、phar归档,前两种执行需要php安装Phar扩展支持,用的也比较少,这里主要讲phar归档格式。
phar格式归档文件可以直接执行,它的产生依赖于Phar扩展,由自己编写的php脚本产生。
Phar扩展对PHP来说并不是一个新鲜的概念,在php5.3已经内建于php中,它最初使用PHP编写并被命名为PHP_Archive,然后在2005年被添加到PEAR库。由于在实际中,解决这一问题的纯PHP解决方案非常缓慢,因此2007年重新编写为纯C语言扩展,同时添加了使用SPL的ArrayAccess对象遍历Phar归档的支持。自那时起,人们做了大量工作来改善Phar归档的性能。
Phar扩展依赖于php流包装器,关于此可参考前面一篇文章PHP流Streams、包装器wrapper概念与用法实例详解
很多php应用都是以phar格式分发并运行的,著名的有依赖管理:composer、单元测试:phpunit,下面我们来看一看如何创建、运行、提取还原。
phar文件的创建:
首先在php.ini中修改phar.readonly这个选项,去掉前面的分号,并改值为off,由于安全原因该选项默认是on,如果在php.ini中是禁用的(值为0或off),那么在用户脚本中可以开启或关闭,如果在php.ini中是开启的,那么用户脚本是无法关闭的,所以这里设置为off来展示示例。
我们来建立一个项目,在服务器根目录中建立项目文件夹为project,目录内的结构如下:
file -yunek.js -yunke.css lib -lib_a.php template -msg.html index.php Lib.php
其中file文件夹有两个内容为空的js和css文件,仅仅演示phar可以包含多种文件格式
lib_a.php内容如下:
msg.html内容如下:
phar =$str;?>