好的,这是我的情景。
我的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和文件输出之间发生的事情提供一些见解,从而导致输出格式错误。
答案 0 :(得分:0)
由于启用了输出压缩,问题是PHP输出被压缩了两次。
解决方案是通过zlib.output_compression
文件中的条目禁用.htaccess
,或者将以下内容包含在.php文件的顶部:
ini_set('zlib.output_compression', 'Off');