Pregunta

Estoy ejecutando IIS7 y PHP5 localmente en mi máquina y el código anterior hará que IIS arroje un error HTTP 500.Después de mucha frustración y confusión, descubrí que cualquier script PHP con una variable vacía arrojará este error de IIS.A continuación se muestra un ejemplo de esto:

<?php $x = $y; ?>

Este comportamiento me parece muy extraño y rompe un gran porcentaje del código que escribo.En la mayoría de los casos, me impide depurar correctamente.Realmente me gustaría ver mensajes de resultado y de error.Además, esto puede interrumpir el uso de los superglobales GET y POST y solo puede suprimirse mediante lógica para evitar su ejecución.

¿Fue útil?

Solución

Uso la configuración IIS7 + PHP usando el módulo fascgi y no obtengo este problema. PHP genera errores correctamente. Verificaría que tiene PHP e IIS configurados correctamente de acuerdo con esta guía:

http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/

La trampa más común es que asignó IIS para llamar a php-win.exe o php.exe frente a llamar a php-cgi.exe. Además, algunas de las configuraciones de php.ini pueden causar este problema. Sin embargo, no recuerdo cuál.

Otros consejos

PHP genera una excepción, imprime en la salida estándar y, con toda probabilidad, informa el error correctamente.Probablemente IIS esté ignorando eso y lanzando el 500.

Intente registrar sus errores en un archivo en lugar de mostrarlos, lo que puede apaciguar a IIS.Creo que es:

display_errors = Off
log_errors = On
error_log = "C:/YourWWW/errors.txt"

...pero no tengo un php.ini a mano para comprobarlo.

Volviendo al tema, si $y está vacío, ¿qué esperas que haga PHP?Cualquier lenguaje de programación en su sano juicio vomitará cuando intente asignar una variable inexistente.Esto sonará duro, pero si eso "rompe la mayor parte del código que escribes", estás haciendo algo mal.Además, no estoy seguro de lo que quieres decir con "interrumpir el uso de" $_GET y $_POST.Si te refieres a esto, arrojará un 500:

$foo = $_GET["nonexistentvar"];

... entonces tienes toda la razón, así será.Deberías comprobar la existencia de la clave antes de esperar que PHP asigne algo que no existe.Pow, no 500:

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

Perdón si sueno hostil, pero tu pregunta parecía muy quejosa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top