我在我的机器上本地运行IIS7和PHP5,上面的代码将导致IIS抛出HTTP 500错误。在经历了很多挫折和困惑之后,我发现任何带有空变量的PHP脚本都会抛出此IIS错误。以下是一个例子:
<?php $x = $y; ?>
我发现这种行为非常奇怪,它打破了我编写的大部分代码。在大多数情况下,它阻止我正确调试。我真的很想看到输出和错误消息。此外,这可以打破超级全局变量GET和POST的使用,并且只能被逻辑抑制以防止它们被执行。
答案 0 :(得分:1)
PHP抛出异常,打印到stdout,并且很可能正确报告错误。 IIS可能会忽略它并抛出500。
尝试将错误记录到文件而不是显示它们,这可能会安抚IIS。我相信它是:
display_errors = Off
log_errors = On
error_log = "C:/YourWWW/errors.txt"
...但是我没有方便的php.ini来检查。
回到问题,如果$y
为空,您希望PHP做什么?当您尝试分配不存在的变量时,任何理智的编程语言都会呕吐。这听起来很苛刻,但如果“打破你写的大部分代码”,你就会做错事。另外,不要确定“打破”$_GET
和$_POST
的使用情况。如果你的意思是这将抛出500:
$foo = $_GET["nonexistentvar"];
...那么你会很对。在期望PHP分配不存在的东西之前,您应该检查密钥是否存在。 Pow,没有500:
$foo = isset($_GET["nonexistentvar"]) ? $_GET["nonexistentvar"] : NULL;
很抱歉,如果我听起来充满敌意,但你在问题中遇到了麻烦。
答案 1 :(得分:1)
我使用fascgi模块使用IIS7 + PHP设置,但没有遇到此问题。 PHP正确输出错误。我会根据本指南验证您是否正确设置了PHP和IIS:
http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/
最常见的陷阱是您分配了IIS来调用php-win.exe或php.exe来调用php-cgi.exe。此外,一些php.ini设置可能会导致此问题。我不记得是哪一个。