Пустая переменная в скрипте PHP заставляет IIS7 выдавать ошибку HTTP 500 - PullRequest
0 голосов
/ 22 октября 2009

Я использую IIS7 и PHP5 локально на моей машине, и приведенный выше код заставит IIS выдать ошибку HTTP 500. После многих разочарований и недоразумений я понял, что любой скрипт PHP с пустой переменной выдаст эту ошибку IIS. Ниже приведен пример этого:

<?php $x = $y; ?>

Я нахожу это поведение очень странным, и оно нарушает большой процент кода, который я пишу. В большинстве случаев это мешает мне правильно отлаживать. Мне бы очень хотелось увидеть вывод и сообщения об ошибках. Кроме того, это может нарушить использование суперглобальных переменных GET и POST и может быть подавлено только логикой для предотвращения их выполнения.

Ответы [ 2 ]

1 голос
/ 23 октября 2009

Я использую настройку IIS7 + PHP с помощью модуля FASGI и не вижу этой проблемы. 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 могут вызвать эту проблему. Я не могу вспомнить, что однако.

1 голос
/ 22 октября 2009

PHP генерирует исключение, печатает на стандартный вывод и, по всей вероятности, сообщает об ошибке должным образом. 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 назначит то, что не существует. Пау, № 500:

$foo = isset($_GET["nonexistentvar"]) ? $_GET["nonexistentvar"] : NULL;

Извините, если я звучу враждебно, но вы столкнулись с очень плаксивым вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...