首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到__halt_compiler

找不到__halt_compiler
EN

Stack Overflow用户
提问于 2015-11-15 12:43:25
回答 1查看 2.6K关注 0票数 5

我正在使用PHP5.6运行本地服务器。我使用的是第三方库,它使用函数__halt_compiler。一旦达到此函数,我将得到以下错误。

PHP致命错误:异常“UnexpectedValueException”和消息“phar的内部损坏”。(__HALT_COMPILER();未找到)

我使用关键字phar__halt_compiler进行的所有搜索都返回无用。下面是打印phpinfo()的一些细节。

代码语言:javascript
复制
Phar: PHP Archive support => enabled
Phar EXT version => 2.0.2
Phar API version => 1.1.1
Phar-based phar archives => enabled
Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => enabled
bzip2 compression => enabled
OpenSSL support => enabled

phar.cache_list => no value => no value
phar.readonly => On => On
phar.require_hash => On => On

有人知道为什么我没有这个函数和/或我如何获得它。

如果我能提供更多的信息,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 14:12:47

有人知道为什么我没有这个函数和/或我如何获得它。

你得出了错误的结论。错误消息没有说“函数未找到”。

要理解它,您应该知道phars是如何内部工作的。如果在编辑器中打开phar文件,您应该会发现如下所示:

代码语言:javascript
复制
#!/usr/bin/env php

<?php

Phar::mapPhar('filename.phar');

$application = require_once 'phar://filename.phar/src/bootstrap.php';
$application->setPharMode(true);
$application->run();

__HALT_COMPILER(); ?>
[binary content follows]

Phar文件是由PHP执行的,就像任何其他PHP文件一样,归档的源代码在__HALT_COMPILER()语句后面。Phar::mapPhar()COMPILER_HALT_OFFSET开始读取文件本身,即在__HALT_COMPILER()之后。

错误消息意味着找不到这个__HALT_COMPILER()语句,并且PHP不知道从哪里开始读取实际的phar。因此,“phar的内部腐败”。由于脚本至少会运行,并且不会因为解析错误而立即失败,所以我想二进制内容完全丢失了。在文本编辑器中打开phar以查找答案。

实际上,我不知道为什么phar会损坏,但我可以想象,当文件合并到一个归档文件时,源代码中的某个地方的__HALT_COMPILER将是一个问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33719794

复制
相关文章

相似问题

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