我正在使用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
有谁知道为什么我没有这个功能和/或我如何获得它。
如果我能提供更多信息,请告诉我。
答案 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会出现问题。