build.php打包www目录:

<?php
class A{
public $a = 1;
}
$p = new Phar('test.phar',0,'test.phar');
$p->buildFromDirectory(dirname(__FILE__)."/www");
//访问phar包外面的文件(require "test.phar")将会执行stub设置的内容
//$p->setDefaultStub('a.php','a.php');
//或
//$stub = $p->createDefaultStub('a.php','a.php');;
//$p->setStub($stub);
//或
$p->setStub("<?php echo 'sssssssssss';__HALT_COMPILER();?>");//__HALT_COMPILER();结尾
//设置metadata,序列化形式保存在phar包里,使用phar包的时候会自动反序列化
$p->setMetadata(new A);
var_dump($p->getMetadata());
?>

index.php中包含phar包:

<?php
class A{
function __destruct(){
echo "destruct";
}
}
require "test.phar";
?>

访问 build.php 进行打包:

生成 test.phar

test.phar包:

访问 index.php

上面通过 require "test.phar" 的方式引用了phar包里的所用文件

“ssssssssss”是设置的stub,“执行” 包时首先执行stub;“destruct” 是 new A对象反序列化时执行的__destruct 函数的输出。

以上析构函数__destruct的执行利用了phar的metadata保存序列化且使用phar包的时候反序列化的特性。

另一种 phar 包的利用:include "phar://test.phar/b/b.php"

修改后缀后同样可以:

参考:

http://blog.csdn.net/wang740209668/article/details/52751915

http://blog.csdn.net/u011474028/article/details/54973571

http://www.91ri.org/13363.html

[php] phar的更多相关文章

  1. PHP的学习--使用phar打包

    前段时间写了几个PHP的脚本,但是因为脚本的项目是基于composer安装的,给别人使用的时候不太方便,就希望能够打包成一个能直接使用的文件. 搜索了一下,发现可以使用phar打包. 假设我们有如下一 ...

  2. phar文件的使用

    1.用php命令行 php phar文件 2.生成bat文件,在命令行下使用,以composer.phar为例 ( 1)在php.exe所在目录新建composer.bat文件 (2)把compose ...

  3. 使用phar上线你的代码包

    在我前一阵子写的一篇文章<新版 SegmentFault 重构之系统架构>中,很多人对其中提到的利用phar上线代码比较感兴趣,我就在这边跟大家分享下我目前的做法. 哪些项目适合phar打 ...

  4. PHP中phar包的使用

    PHP5.3之后支持了类似Java的jar包,名为phar.用来将多个PHP文件打包为一个文件. 首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,includ ...

  5. Yii2框架打包成Phar包报错的经历

    以yii2为例 打包文件过程比较简单,但打包好以后简单测试yii命令,一直报错: PHP Fatal error: Uncaught yii\base\InvalidParamException: T ...

  6. Phar与Composer

    如果你想把PHP玩出像Java那样的花来,那Phar.Composer甚至Phing应该都是必须要玩一遍的. Phar - Php Archive.包管理器,有些类似Java中的jar包,但有所不同. ...

  7. Phar文件

    phar 扩展名文件提供了一种将整个PHP应用程序打包放入一个被称之为phar(PHP archive)的文件从而更加容易便利地发布和安装的方法.就像是java的jar文件有点类似.除了这个功能外,P ...

  8. 简单使用 PHP Phar 打包php代码 笔记

    Phar简介:Phar 归档的概念来自 Java™ 技术的 JAR 归档,它允许使用单个文件打包应用程序,这个文件中包含运行应用程序所需的所有东西.该文件不同于单个可执行文件,后者通常由编程语言生成, ...

  9. Could not open input file: composer.phar

    Yii 2官网推荐用Composer安装框架,但是在本地出错:Could not open input file: composer.phar.后来修改了命令行就ok了,难道是我装的Composer跟 ...

  10. PHAR系列之导言

    由于之前都是在现成的PHP框架下写web项目,一般都只专注于框架内部的使用跟优化.但是对于一些PHP很有特色的功能跟特性很少过多的深入了解.最近做项目调研的时候偶尔注意到一个PHP中一个比较常见的概念 ...

随机推荐

  1. electron原来这么简单----打包你的react、VUE桌面应用程序

    也许你不甘心只写网页,被人叫做"他会写网页",也许你有项目需求,必须写桌面应用,然而你只会前端,没关系.网上的教程很多,但是很少有能说的浅显易懂的,我尽力将electron打包应用 ...

  2. ubuntu 安装maven

    1.下载maven文件 切换目录 root@ubuntu:~# cd /usr/local 下载文件 root@ubuntu:/usr/local# wget http://mirror.bit.ed ...

  3. Java接口继承

    Java中接口可以继承接口,并且可以多继承.

  4. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)

  5. ecshop启用gzip后,后台不能打开不能访问的问题

    上传测试的时候,站点显示无法打开.随后我用网址打开根目录的robots文件.图片.静态页···全部可以正常打开··· 我尴尬···一一检查后,我就怀疑是不是客户当初设置gzip压缩的问题了.但连后台都 ...

  6. 20190928 On Java8 第二十三章 注解

    第二十三章 注解 定义在 java.lang 包中的5种标准注解: @Override:表示当前的方法定义将覆盖基类的方法.如果你不小心拼写错误,或者方法签名被错误拼写的时候,编译器就会发出错误提示. ...

  7. python+selenium文本框对象以及按钮对象操作

    文本框对象 from selenium import webdriverfrom time import sleep driver = webdriver.Firefox() # 指定和打开浏览器ur ...

  8. vsphere虚拟化之Active Directory域的创建(一)

    1.搭建环境说明 本机是在Vmware Workstation 12 Pro虚拟软件下进行搭建的. 操作系统版本:Windows Server 2012 R2 简体中文企业版x64. 2.安装完win ...

  9. sql下的xml配置文件中特殊使用的sql语句编写

    1.使用服用的sql语句------------查询学生表所有字段 <sql id="selectAllStuAll"> select stu.id,stu.name, ...

  10. 2 python: Unicode 和list 列表

    1 unicode 2 list 列表及其内置函数等 3 不一样的for语句 Python 的 for 语句依据任意序列(链表或字符串)中的子项,按它们在序列中的顺序来进行迭代 >>> ...