【问题标题】:shell_exec() to call a php file returns incorrect output character encodingshell_exec() 调用 php 文件返回不正确的输出字符编码
【发布时间】:2013-01-10 23:30:28
【问题描述】:

好的,这是我的方案。

我有 file.php,其中包含以下内容:

<?php
$output = shell_exec("php output.php");
echo $output;   
?>

output.php 包含以下内容:

<?php
echo "This is my output!";
?>

当我从网络浏览器运行 file.php 时,我得到以下输出:

‹ ÉÈ,V¢ÜJ…üÒ’‚ÒEÿÿp³*š

但是,当我直接从 shell 运行相同的 php output.php 时,我得到了正确的输出:

This is my output!

现在我很清楚这是某种编码问题,但我终生无法弄清楚如何解决它。我尝试使用putenv('LANG=en_US.UTF-8'); 设置语言。我还尝试使用header('Content-Type: text/html; charset=UTF-8');,甚至尝试确定使用mb_detect_encoding($out, 'UTF-8', true); 输出的编码类型。没有结果。

exec() 产生相同的错误输出。

如果有人能对此有所了解,并可能就 shell_exec 和文件输出之间发生的导致输出格式错误的情况提供一些见解,我将不胜感激。

【问题讨论】:

  • 当您执行shell_exec("php -i") 时会发生什么?有什么线索吗?
  • 我运行了它,它只会产生一大块乱码。当我通过它运行 PHP 时,shell_exec() 产生的输出似乎不正确。如果我运行shell_exec("whoami");,它会返回正确的结果,即当前用户。
  • 您是否尝试过将完整路径放入您的 PHP 可执行文件 (shell_exec("/usr/bin/php output.php"))?
  • 是的,我实际上想过尝试shell_exec("/usr/bin/php output.php"),它产生了相同的结果。将#!/usr/bin/php 添加到output.php 的顶部也不会改变任何东西:/
  • 不是编码,看起来像是双重压缩问题。检查deflategzhandler 等的网络服务器和 php 设置。

标签: php shell encoding shell-exec


【解决方案1】:

问题是由于启用了输出压缩,PHP 输出被压缩了两次。

解决方案是通过在 .htaccess 文件中的条目或在 .php 文件顶部包含以下内容来禁用 zlib.output_compression

ini_set('zlib.output_compression', 'Off');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多