下一次在我的生活中,我会在函数__halt_compiler之后看到一些字节码。在这种情况下,它是symfony安装程序。怎么做 ?如何生成在__halt_compiler之后可执行的代码?
答案 0 :(得分:6)
我想你的意思是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:
A stub,这是您可以看到的简短PHP脚本。
包含档案协定说明的清单
包含内容的档案
可选签名
顶部的存根是一个常规的PHP脚本,因此PHAR存档可以使用常规的PHP解释器运行,而不需要专用的可执行文件:
php foo.phar
此脚本块以__HALT_COMPILER();到::
结尾防止文件的其余部分被解析并可能作为PHP代码执行(主脚本完成了初始阶段所需的所有操作)。
填充__COMPILER_HALT_OFFSET__
常量,以便PHAR库可以轻松检测归档数据的开始位置。
这个脚本做了三件事: