phar打包PHP代码

阿里云服务器3折开售(点此直达)

image

前一阵子,参加了一个阿里的PHP技术小会议。主讲人周梦康,分享了一下 phar 这个东东。
之前,还真没咋注意。
正好今儿有时间有兴趣,自己也研究一下。梳理一下流程。
image.png

开始咯。。。。

首先要做的一件事就是...等等。。。好像忘记说了一个东西。
自从 php5.3开始,就集成了 phar 这个东东。但是,但是,但是!!!这玩意儿默认是关闭的。。。


clipboard.png

找到 自己的 php.ini 文件,进入,修改 【phar】phar.readonly 为 off 。它默认是 on。


kengdie.png

寻找自己的 php.ini 找不到的话,在自己的控制台, php -ini | grep ini

phpini.png

不罗嗦了,开始,开始~~~ 真的开始~~~

1.创建a.php文件

<?php
class a{
        private $b='1';

        public function setB($b1){
                $this->b = $b1;
        }

        public function prf(){
                echo 'prf function prfffff'.$this->b;
        }
}

2、创建c.php文件,实例化类 a

<?php
include('a.php');

$a = new a();
$a->prf();

$a->setB('bbbbbb');
$a->prf();

3、 将 a.php 的代码打包,并设置默认启动类

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

4、在当前目录下,就会出现 a.phar 文件。此文件就是打包好的 phar 文件。此文件可以直接通过 php 运行


4.png

5、直接运行 phar 文件。可以看到,输出上面的结果了。


5.png

6、除此之外,此 phar 包文件,还可以通过代码解析,然后和java类似的方式,进行 Jar 包内的方法调用。而 phar 亦可以达到同等的效果。
<?php
//include('a.phar'); // 这种方式,会将a.phar包内的所有的类都加载进来。类似于 java的 import com.a.*的这种效果。将不需要的也导入进来。
真的没必要
include('phar://a.phar/a.php'); //需要啥,就从包内加载啥。很方便,又简洁
$d = new a();
$d->setB('dddd');
$d->prf();

效果:


cd.png

这玩意儿,简直是 做兼职啥的神器啊……不给钱,就不给你源码……


hahjpeg.jpeg

后来又 vim 看了一下, a.phar 里面的内容。
里面全都是

luanma.png

这也算认为是一种混淆了吧~~~~
就是不知道,其混淆程度能不能达到 android 的程度~
android 的原生混淆,亦有各种反编译的存在。但是一旦通过各种第三方比如360,加壳混淆打包等处理一下,基本就反编译无望了。这也应该是目前大部分人在用的吧。

phar 这个玩意儿,不知道能不能反编译回来~拿到源码或者大概能看懂的代码。

有时间再研究吧。就到这里了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容