找不到PHP __halt_compiler

时间:2015-11-15 12:43:25

标签: php

我正在使用PHP 5.6运行本地服务器。我正在使用使用函数__halt_compiler的第三方库。达到此功能后,我收到以下错误。

  

PHP致命错误:未捕获的异常' UnexpectedValueException'同   消息' phar'内部腐败。 (__HALT_COMPILER();未找到)

我使用关键字phar__halt_compiler的所有搜索都无效。以下是打印phpinfo()的一些详细信息。

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

有谁知道为什么我没有这个功能和/或我如何获得它。

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

1 个答案:

答案 0 :(得分:3)

  

有谁知道为什么我没有这个功能和/或我如何获得它。

你得出了错误的结论。错误消息没有说“找不到功能”。

要理解它,你应该知道phars如何在内部工作。如果您在编辑器中打开一个phar文件,您应该找到如下内容:

#!/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会出现问题。