首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__halt_compiler之后的代码执行

__halt_compiler之后的代码执行
EN

Stack Overflow用户
提问于 2017-06-03 01:08:49
回答 1查看 434关注 0票数 5

下一次,在我的生活中,我看到了函数__halt_compiler之后的一些字节码。在本例中,它是symfony安装程序。如何做到这一点?如何生成在__halt_compiler之后可执行的代码?

EN

回答 1

Stack Overflow用户

发布于 2017-06-06 00:43:00

我猜你指的是https://symfony.com/installer,一个像这样开始的PHAR归档文件:

代码语言:javascript
复制
#!/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

  • stub,这是您可以看到的简短PHP脚本。
  • 包含归档内容描述的清单

顶部的存根是一个常规的PHP脚本,因此PHAR归档可以使用常规的PHP解释器运行,而不需要专用的可执行文件:

代码语言:javascript
复制
php foo.phar

此脚本块以__HALT_COMPILER(); to::结尾

PHP防止文件的其余部分被解析并可能作为代码执行(主脚本会执行初始phase).

  1. Populate所需的所有操作__COMPILER_HALT_OFFSET__常量,以便库可以轻松地检测归档数据的起始位置。

这个脚本做了三件事:

Phar库检测computer.

  • Load当前文件中是否有可用的Phar归档,并在归档中使用content description.

  • Execute symfony script注册清单,这是实际的安装程序代码。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44334145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档