Phar档案输出乱码

时间:2009-10-16 11:18:58

标签: php apache phar

我使用以下代码创建了我的第一个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上运行,但不在浏览器中吗?

3 个答案:

答案 0 :(得分:6)

这个问题的答案在于

detect_unicode

在php.ini中设置。

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

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

detect_unicode = Off
在你的php.ini中

。您需要付出的代价是无法使用unicode字符作为变量,函数和类的名称(它们在注释和字符串中仍然很好)

答案 1 :(得分:0)

您是否尝试过查看网页的来源?也许你在修改httpd.conf后忘了重启Apache。

答案 2 :(得分:-1)

我对phar文件的理解,你打算在php脚本中打开(fopen)你要调用的文件....如果你要回复那些字符,那就意味着apache正在向你发送文件以二进制格式......

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