调用php文件的shell_exec()返回不正确的输出字符编码

调用php文件的shell_exec()返回不正确的输出字符编码,php,shell,encoding,shell-exec,Php,Shell,Encoding,Shell Exec,好的,这是我的设想 我有file.php,其中包含以下内容: <?php $output = shell_exec("php output.php"); echo $output; ?> <?php echo "This is my output!"; ?> 当我从web浏览器运行file.php时,我得到以下输出: ‹ ÉÈ,V¢ÜJ…üÒ’‚ÒEÿÿp³*š 但是,当我直接从shell运行相同的php output.php时,我得到了正确的输出: This

好的,这是我的设想

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

<?php
$output = shell_exec("php output.php");
echo $output;   
?>
<?php
echo "This is my output!";
?>
当我从web浏览器运行
file.php
时,我得到以下输出:

‹ ÉÈ,V¢ÜJ…üÒ’‚ÒEÿÿp³*š
但是,当我直接从shell运行相同的
php output.php
时,我得到了正确的输出:

This is my output!
现在我很清楚这是某种编码问题,但我一辈子都不知道如何解决它。我尝试使用
putenv('LANG=en_US.UTF-8')设置语言。我还尝试使用
标题('Content-Type:text/html;charset=UTF-8')
甚至尝试使用
mb_detect_编码($out,'UTF-8',true)确定输出的编码类型。没有结果

exec()
产生相同的、格式错误的输出


如果有人能解释一下这一点,并能提供一些关于shell_exec和文件输出之间发生了什么导致输出格式错误的见解,我将不胜感激。

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

解决方案是禁用
zlib.output\u compression
,方法是在
.htaccess
文件中输入一个条目,或者在.php文件顶部包含以下内容:

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

当您执行一个
shell_exec(“php-i”)
时会发生什么?有什么线索吗?我查过了,它只是产生了一大块乱七八糟的声音。当我运行PHP时,
shell_exec()
生成的输出似乎不正确。如果我运行
shell_uexec(“whoami”)
返回正确的结果,即当前用户。您是否尝试过将完整路径放入PHP可执行文件(
shell\u exec(“/usr/bin/PHP output.PHP”)
)?是的,我确实想过尝试
shell\u exec(“/usr/bin/PHP output.PHP”)
,结果也是一样的。添加
#/usr/bin/php
output.php
的顶部,它也不会改变任何东西,除了编码,它看起来像是双重压缩问题。检查您的Web服务器和php设置是否有
deflate
gzhandler
等。