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