shell_exec()调用php文件返回错误的输出字符编码

时间:2013-01-10 23:30:28

标签: php shell encoding shell-exec

好的,这是我的情景。

我的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和文件输出之间发生的事情提供一些见解,从而导致输出格式错误。

1 个答案:

答案 0 :(得分:0)

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

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

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