2

好的,这是我的场景。

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

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

其中output.php包含以下内容:

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

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

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

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

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 和文件输出之间发生的事情导致输出格式错误的见解。

4

1 回答 1

0

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

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

ini_set('zlib.output_compression', 'Off');
于 2013-01-11T00:46:17.003 回答