zoukankan      html  css  js  c++  java
  • [php] phar

    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

  • 相关阅读:
    第十二周
    第十一周作业
    第十周作业
    第九周作业
    第五周总结和实验报告三
    第四周总结和实验报告二
    第一周实验报告和第三周课程总结
    第二周总结
    2019春总结作业
    2019年春第二次课程设计实验报告
  • 原文地址:https://www.cnblogs.com/natian-ws/p/7835277.html
Copyright © 2011-2022 走看看