我正在使用PHP5.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有人知道为什么我没有这个函数和/或我如何获得它。
如果我能提供更多的信息,请告诉我。
发布于 2015-11-15 14:12:47
有人知道为什么我没有这个函数和/或我如何获得它。
你得出了错误的结论。错误消息没有说“函数未找到”。
要理解它,您应该知道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将是一个问题。
https://stackoverflow.com/questions/33719794
复制相似问题