下一次,在我的生活中,我看到了函数__halt_compiler之后的一些字节码。在本例中,它是symfony安装程序。如何做到这一点?如何生成在__halt_compiler之后可执行的代码?
发布于 2017-06-06 00:43:00
我猜你指的是https://symfony.com/installer,一个像这样开始的PHAR归档文件:
#!/usr/bin/env php
<?php
/**
* Generated by Box.
*
* @link https://github.com/herrera-io/php-box/
*/
if (class_exists('Phar')) {
Phar::mapPhar('default.phar');
require 'phar://' . __FILE__ . '/symfony';
}
__HALT_COMPILER(); ?>从概念上讲,PHAR归档与自解压ZIP文件没有太大区别(事实上,ZIP是受支持的内部格式之一)。归档contains
顶部的存根是一个常规的PHP脚本,因此PHAR归档可以使用常规的PHP解释器运行,而不需要专用的可执行文件:
php foo.phar此脚本块以__HALT_COMPILER(); to::结尾
PHP防止文件的其余部分被解析并可能作为代码执行(主脚本会执行初始phase).
__COMPILER_HALT_OFFSET__常量,以便库可以轻松地检测归档数据的起始位置。这个脚本做了三件事:
Phar库检测computer.
https://stackoverflow.com/questions/44334145
复制相似问题