IIS7 和 PHP:显示错误消息以及所有其余输出

IIS7 和 PHP:显示错误消息以及所有其余输出

好吧,这慢慢变得烦人了。我习惯使用 Apache Web 服务器,从来没有遇到过这些问题。IIS 似乎试图变得智能 - 或者其他什么。

我的情况是这样的:我的客户想要一个 PHP 网站,它应该在 Windows IIS 网络服务器上运行。

对于我的开发环境,我可以使用 Apache - 但为了确保万无一失,我也想使用 IIS。因此,我使用 Windows Vista 设置了一个开发服务器,安装了所有最新更新并安装了 IIS。一切都很好!

我很快在 Microsoft 的一些官方网站上找到了有关如何在 IIS 中安装 PHP 的说明。修改了 php.ini - 多年来一直在 Linux/Apache 机器上进行这样的操作。

所以现在我有一个运行 IIS 的服务器和我用来开发的工作站,可以通过网络访问服务器上的文件。

我的第一个“phpinfo()”页面 - 一切正常。现在我故意引入一个错误来破坏页面:我的工作站上只显示“服务器错误 500”。当我直接在服务器上访问该页面时,我看到一条 PHP 错误消息... 好吧,用这个 serverfault.com 问题

但是:它仍然让我很烦恼:现在如果出现错误,我得到的只是错误消息。我看不到脚本的任何其他输出。事实上,在 Firefox 中,如果出现错误,我什么也看不到。

例如如果我这样做...

<?PHP 
$sql = 'THIS WON\'T WORK';
echo $sql;
$DB->exec($sql);  // <- This causes an error
?>

我得到的是

PHP Fatal error:  Call to a member function exec() on a non-object in C:\inetpub\wwwroot\phpinfo.php on line 4

我真正想要的是它向我显示错误发生之前发生的所有事情的输出,以便我可以使用它来解决我的问题。

我如何让 IIS (或 PHP?) 显示所有内容?错误消息和上下文?通过网络?

更新

好的,我可能找到了线索。当我进入控制台并通过 php-cgi.exe 手动调用脚本时,我得到了以下结果:

PHP Fatal error:  Call to a member function exec() on a non-object in C:\inetpub
\wwwroot\phpinfo.php on line 4
X-Powered-By: PHP/5.4.12
Content-type: text/html

THIS WON'T WORK<br />
<b>Fatal error</b>:  Call to a member function exec() on a non-object in <b>C:\i
netpub\wwwroot\phpinfo.php</b> on line <b>4</b><br />

然后,我尝试将输出通过管道传输到文件,并发现前两行通过管道传输到 stderr,其余行传输到 stdout(点击此处了解更多信息)。

我还可以看到,我在浏览器中得到的内容是 stderr 的输出,因为它不包含任何 HTML 格式。

现在,我可以将问题缩小到:我有一个 FastCGI PHP-CGI,它将错误消息输出到 stderr,并将导致错误的页面输出到 stdout。它目前将 stderr 转发到浏览器 - 我如何让它改用 stdout?

答案1

...最后我让它工作了。

根据我的 stderr 发现,我进行了更多的谷歌搜索,并找到了关于“使用配置设置保护 PHP“在 IIS.net 上。

我有一台开发机器,所以我并不需要让它变得万无一失,但它仍然有我的解决方案:

fastcgi.logging=0

将其放入您的 PHP.INI 中,PHP 将停止向 stderr 发送内容 - 瞧:我在浏览器窗口中获得了通常的 PHP 输出!

相关内容