【发布时间】: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的顶部也不会改变任何东西:/ -
不是编码,看起来像是双重压缩问题。检查
deflate、gzhandler等的网络服务器和 php 设置。
标签: php shell encoding shell-exec