找不到 PHP __halt_compiler

cno*_*gr8 5 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
Run Code Online (Sandbox Code Playgroud)

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

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

Fab*_*ler 4

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

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

要理解它,您应该知道 phas 内部是如何工作的。如果您在编辑器中打开 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]
Run Code Online (Sandbox Code Playgroud)

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

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

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