简单来说,Phar就是把Java界的jar概念移植到了PHP界。

Phar可以将一组PHP文件进行打包,还可以创建默认执行的stub(或者叫做 bootstrap loader),Phar可以选择是否进行压缩,可选gzip和bzip2格式。

下面举例说明如何创建和使用Phar:

假设我们的项目名称是user,包含三个文件:

user/user.class.php

<?php

class user {
private $name="anonymous";
private $email="anonymous@nonexists.com"; public function set_email($email) {
$this->email=$email;
}
public function set_name($name) {
$this->name=$name;
}
public function introduce() {
echo "My name is $this->name and my email address is $this->email.\n";
} }

user/user.func.php

<?php

require_once "user.class.php";

function make_user($name,$email) {
$u=new user();
$u->set_name($name);
$u->set_email($email);
return $u;
} function dump_user($u) {
$u->introduce();
}

user/test.php

<?php
require_once "user.class.php"; $u=new user();
$u->set_name("laomeng");
$u->set_email("laomeng@163.com");
$u->introduce();

然后我们使用如下PHP程序创建Phar文件:

make_phar.php

<?php
$phar = new Phar('user.phar', 0, 'user.phar');
$phar->buildFromDirectory(dirname(__FILE__) . '/user');
$phar->setStub($phar->createDefaultStub('test.php', 'test.php'));
$phar->compressFiles(Phar::GZ);

执行 php make_phar.php后,可以在当前目录发现一个叫做user.phar的文件。

我们可以直接执行user.phar文件:

php user.phar,这个相当于执行user/test.php

我们还可以引用此文件:

test_phar.php

<?php
require_once "user.phar";
require_once "phar://user.phar/user.class.php";
$u=new user();
$u->set_name("mengguang");
$u->set_email("mengguang@gmail.com");
$u->introduce(); require_once "phar://user.phar/user.func.php"; $u=make_user("xiaomeng","xiaomeng@163.com");
dump_user($u);

参考资料:

https://php.net/manual/en/book.phar.php

使用Phar来打包发布PHP程序的更多相关文章

  1. Qt技巧:Win7下打包发布Qt程序(解释的比较清楚,把exe和dll伪装合并成一个文件)

    转自:http://www.stardrad.com/blog/qt-5%E7%A8%8B%E5%BA%8F%E5%9C%A8windows%E4%B8%8A%E7%9A%84%E5%8F%91%E5 ...

  2. Unity3d打包发布Android程序

    unty3d这个款游戏引擎的强大之处就是编写一个程序.可以多平台发布.我的是安卓手机.所以此文介绍下发布安卓的过程 发布安卓前. 1:需要配置java环境.这里之前写过一篇java的配置  http: ...

  3. 在Linux下通过rpm打包发布Java程序

    这个东西涉及的内容较多,根据下面这些文章慢慢学习 一个简单的例子 http://blog.csdn.net/king_on/article/details/7169384 按照文章中的步骤来,打包之后 ...

  4. 【转载】Visual Studio2017如何打包发布Winform窗体程序

    在用C#语言编写好Winform窗体程序后,最后一步的操作是将设计好的Winform程序代码进行打包以及发布成安装包.在Visual Studio2017开发工具中,打包发布WinForm程序是比较简 ...

  5. qt5.5程序打包发布以及依赖【转】

    玩qt5也有一段时间了,惭愧的是一直没有好好的发布过程序,因为写的都是小程序没啥需要用到发布,而且qt也说不上很熟悉,本来打算到基本掌握qt之后再来研究研究怎么打包程序,最近晚上的空闲时间多了,闲着也 ...

  6. QT5.4 计算器程序 打包&发布,解决dll的最新解决方案

    QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...

  7. QT5.4 计算器程序 打包&发布,解决dll的最新解决方案(图文并茂,很清楚)

    QT写界面还是很不错,就是打包会比较麻烦,折腾了一天总算是打包完成了. QT软件的打包发布一个难点是必备dll文件的识别,现在高版本QT自带了一个windeployqt工具,直接会把需要的dll生成一 ...

  8. Qt之新手打包发布程序

    工具:电脑必备.QT下的windeployqt Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无 ...

  9. QT程序打包发布

    本来感觉这是一个简单的操作,今天看见群里有人在问这个问题,他说网上查了很多都不成功,突然就想把自己初学的时候记录一下! 题目谢了QT程序的打包发布,那就是两步骤:打包+发布! 注释:这篇博文用的是Qt ...

随机推荐

  1. oracle加密传输

    参考文章: http://blog.itpub.net/24052272/viewspace-2129175/ oracle在传输过程中,正常是明文传输的,例如SQL以及执行的结果. 看看做的测试: ...

  2. 【原创】大叔经验分享(41)hdfs开启kerberos之后报错Encryption type AES256 CTS mode with HMAC SHA1-96 is not supported/enabled

    hdfs开启kerberos之后,namenode报错,连不上journalnode 2019-03-15 18:54:46,504 WARN org.apache.hadoop.security.U ...

  3. PHP中empty,isset,is_null的区别

    isset 判断变量是否已存在 empty 判断变量是否为空或为0 is_null 判断变量是否为NULL 仅作为记录使用. 参考链接:http://www.jb51.net/article/6903 ...

  4. [C]gcc编译器的一些常用语法

    简单的GCC语法: 如果你只有一个文件(或者只有几个文件),那么就可以不写Makefile文件(当然有Makefile更加方便),用gcc直接编译就行了.在这里我们只介绍几个我经常用的几个参数,第一是 ...

  5. 支付宝调用错误:Call to undefined function openssl_sign()

    打开php.ini,找到这一行 ;extension=php_openssl.dll,将前面的“;”去掉:重启服务器

  6. Confluence 6 使用 Fail2Ban 来限制登录尝试

    什么是 Fail2Ban? 我们需要在我们网站中防止密码的暴利破解.Fail2Ban 是一个 Python 的应用来查看日志文件,使用的是正则表达式,同时还可以与Shorewall (或者 iptab ...

  7. python 与mongodb 交互

    创建管理员 1 > use admin 2 switched to db admin 3 > db 4 admin 5 > db.createUser({user:'admin',p ...

  8. WPA-PSK无线网络密码破解原理

    1.基于WPA2的加密标准还是能够被破解,一个弊端是他无法避开时候双方验证的模式来认证取得合法性的连接,当我们抓取足够多得双反认证的数据包之后就可以破解密码.之前很多片的博客写了如何破解这种加密的秘钥 ...

  9. CF1121C 模拟

    恶心场恶心题,,round千万不能用库函数的.. /*枚举时间轴t,r是当前完成比例, 记录每个测试的开始时间si,如果有t-si等于r,那么这个测试就标记一下 优先队列存储每个测试,按照si+ai的 ...

  10. 拓扑排序基础 hdu1258,hdu2647

    由这两题可知拓扑排序是通过“小于”关系加边建图的 hdu2647 /* 拓扑排序的原则是把“小于”看成有向边 此题反向建图即可 并且开num数组来记录每个点的应该得到的权值 */ #include&l ...