phar (“Php ARchive”) 是PHP里类似于JAR的一种打包文件。如果你使用的是PHP5.3或更高版本,那么phar后缀文件是默认开启支持的,你不需要任何其他的安装就可以使用它。
phar归档文件有三种格式:tar归档、zip归档、phar归档,前两种执行需要php安装phar 扩展支持,用的也比较少,这里主要讲phar归档格式。
phar文件缺省状态是只读的,使用phar文件不需要任何的配置,部署非常方便。因为我们要创建phar文件,所以需要允许写入phar文件,这需要修改一下php.ini。找到phar.readonly将其修改为phar.readonly = off,注意不要忘记去掉前面的注释分号;。
一、创建phar文件
我们建立项目文件夹project,目录内结构如下:
static
-common.js
-app.css
lib
-liba.php
template
-msg.html
index.php
common.php
1
2
3
4
5
6
7
8
9
static
-common.js
-app.css
lib
-liba.php
template
-msg.html
index.php
common.php
项目文件有了,现在我们开始创建phar文件。首先在project同级目录下创建文件build.php,用于产生phar格式文件。内容如下:
PHP
/**
* @Author 木凡
* @DateTime 2020-04-24T15:03:49+0800
* @Domian http://mounui.com
*/
// 产生一个myphar.phar文件
$phar = new Phar('myphar.phar');
// 添加project里面的所有文件到myphar.phar文件
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
// 设置执行时的入口文件,这里都设置为index.php。注意:如果项目不具备单一执行入口则不宜使用phar归档文件
$phar->setStub($phar->createDefaultStub('index.php'));
1
2
3
4
5
6
7
8
9
10
11
/**
* @Author 木凡
* @DateTime 2020-04-24T15:03:49+0800
* @Domian http://mounui.com
*/
// 产生一个myphar.phar文件
$phar=newPhar('myphar.phar');
// 添加project里面的所有文件到myphar.phar文件
$phar->buildFromDirectory(dirname(__FILE__).'/project');
// 设置执行时的入口文件,这里都设置为index.php。注意:如果项目不具备单一执行入口则不宜使用phar归档文件
$phar->setStub($phar->createDefaultStub('index.php'));
new Phar的参数是压缩包的名称。buildFromDirectory指定压缩的目录,第二个参数可通过正则来制定压缩文件的扩展名。执行build.php文件就创建了一个myphar.phar文件。
在创建过程中可能会遇到错误提示“creating archive "myphar.phar" disabled by the php.ini setting phar.readonly”,这里就是没有修改php.ini中phar.readonly = off引起的。
二、使用phar文件
在使用的时候我们只需要直接引入phar文件就可以了
PHP
/**
* @Author 木凡
* @DateTime 2020-04-24T15:10:55+0800
* @Domian http://mounui.com
*/
// 当我们使用index.php文件的时候只需要引入myphar.phar就可以,因为创建的时候我们设置的入口文件就是index.php
include "myphar.phar";
// 使用其他文件的时候不仅要引入phar,还要单独引入要使用的文件
include "phar://myphar.phar/common.php";
1
2
3
4
5
6
7
8
9
/**
* @Author 木凡
* @DateTime 2020-04-24T15:10:55+0800
* @Domian http://mounui.com
*/
// 当我们使用index.php文件的时候只需要引入myphar.phar就可以,因为创建的时候我们设置的入口文件就是index.php
include"myphar.phar";
// 使用其他文件的时候不仅要引入phar,还要单独引入要使用的文件
include"phar://myphar.phar/common.php";
在实际项目中一般会在入口文件中导入其他所需的全部文件,所以如果项目不具备单一入口不宜使用phar归档文件。
三、还原phar文件
PHP
/**
* @Author 木凡
* @DateTime 2020-04-24T15:15:55+0800
* @Domian http://mounui.com
*/
// 需要还原的phar文件,路径不要写错
$phar = new Phar('myphar.phar');
// 这里填写phar文件的还原路径和名称
$phar->extractTo('myphar');
1
2
3
4
5
6
7
8
9
/**
* @Author 木凡
* @DateTime 2020-04-24T15:15:55+0800
* @Domian http://mounui.com
*/
// 需要还原的phar文件,路径不要写错
$phar=newPhar('myphar.phar');
// 这里填写phar文件的还原路径和名称
$phar->extractTo('myphar');
经过打包归档后的文件在使用的时候并不会影响效率,而且方便部署。