2

我使用以下代码创建了我的第一个 phar 存档:

$phar = new Phar('myphar.phar');
$phar->addFile("index.php");
$phar->setStub($phar->createDefaultStub('index.php', 'index.php'));

提到的 index.php 只做一个输出:

echo "I am in a PHP archive!";

当我运行上面的代码时,会创建 myphar.phar,当我在 cli 中运行时,输出是“我在 PHP 存档中!”。但是,当我从 webbrowser 调用 myphar.phar 时,它会打印一些奇怪的字符,例如????�???�?,而不是我的 index.php 内容并且没有错误。

我将以下行添加到我的 apache httpd.conf 以支持 phar 档案:

AddType application/x-httpd-php .phar

有人知道为什么它可以在 cli 上运行,但不能在浏览器中运行吗?

4

3 回答 3

6

这个问题的答案在于

detect_unicode

在你的 php.ini 中设置。

当前 PHP ( http://bugs.php.net/bug.php?id=42396 ) 中存在一个错误,如果启用了 detect_unicode,则 __halt_compiler() 无法正常工作。

因此,作为临时解决方法,设置

detect_unicode = Off

在你的 php.ini 中。您必须付出的代价是无法使用 unicode 字符作为变量、函数和类的名称(它们在注释和字符串中仍然可以使用)

于 2010-06-25T08:05:18.373 回答
0

您是否尝试过查看网页的来源?也许您在修改 httpd.conf 后不知何故忘记重新启动 Apache。

于 2009-10-16T11:59:24.647 回答
-1

我对 phar 文件的理解,您应该在您将要调用的 php 脚本中打开(fopen)该文件....如果您要取回这些字符,则意味着 apache 正在以二进制格式向您发送文件……

如果您将此“AddType application/x-gzip .gz .tgz .phar”添加到 apache 配置中,它将使文件像任何其他存档文件一样可下载,并且不会像 php 脚本那样执行它

于 2009-10-16T12:23:16.697 回答