Phar 存档输出乱码

发布于 2024-08-07 11:54:32 字数 599 浏览 13 评论 0原文

我使用以下代码创建了我的第一个 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 中运行时,输出为“I我在 PHP 存档中!”。 但是,当我从网络浏览器调用 myphar.phar 时,它会打印一些奇怪的字符,例如 ??????�???�?,而不是我的 index.php 内容,并且没有错误。

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

AddType application/x-httpd-php .phar

有谁知道为什么它在 cli 上工作,但在浏览器中不起作用?

I've created my first phar archive with the following code:

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

The mentioned index.php only does a single output:

echo "I am in a PHP archive!";

When I run the above code, myphar.phar is created and when I run in at the cli, the output is "I am in a PHP archive!".
However, when I call the myphar.phar from a webbrowser, it prints some weird characters, like ????�???�?, instead of my index.php contents and no error.

I added the following line to my apache httpd.conf to support phar archives:

AddType application/x-httpd-php .phar

Does anybody know why it works on the cli, but not in the browser?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

百思不得你姐 2024-08-14 11:54:32

这个问题的答案在于

detect_unicode

php.ini 中的设置。

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

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

detect_unicode = Off

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

The answer to this problem lies in the

detect_unicode

setting in your php.ini.

There is currently a bug in PHP (http://bugs.php.net/bug.php?id=42396) which makes __halt_compiler() not work correctly if detect_unicode is enabled.

So as a temporary workaround, set

detect_unicode = Off

in your php.ini. The price you have to pay is the inability to use unicode characters as the name of variables, functions and classes (they are still fine inside comments and strings)

固执像三岁 2024-08-14 11:54:32

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

Have you tried to view the source of the web page? Maybe you have somehow forgot to restart Apache after modifying httpd.conf.

○愚か者の日 2024-08-14 11:54:32

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

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

My understanding of the phar file , you are suppose to open(fopen) the file in your php script which you are gonna be calling....if you are getting those characters back, it means apache is sending you the file in binary format....

if you add this "AddType application/x-gzip .gz .tgz .phar" to the apache config, it will make the file download-able like any other archive file and will not execute it like a php script

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文