pg_query error conectar con php debugging error-handling

conectar - ¿Cómo obtener mensajes de error útiles en PHP?



pg_query error (29)

Configuración de PHP

2 entradas en php.ini dictan la salida de errores:

  1. display_errors
  2. error_reporting

En producción , display_errors generalmente está Off (lo que es bueno, porque la visualización de errores en los sitios de producción generalmente no es deseable).

Sin embargo, en desarrollo , se debe establecer en On , para que se muestren los errores. Cheque

error_reporting (a partir de PHP 5.3) se establece de forma predeterminada en E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (es decir, todo se muestra excepto los avisos, estándares estrictos y avisos de desaprobación). En caso de duda, E_ALL en E_ALL para mostrar todos los errores. Cheque

¡Whoa Whoa! ¡Sin verificación! No puedo cambiar mi php.ini!

Es una pena. Por lo general, los hosts compartidos no permiten la alteración de su archivo php.ini, por lo que, lamentablemente, esta opción no está disponible. ¡Pero no temas! Tenemos otras opciones!

Configuración de tiempo de ejecución

En el script deseado, podemos alterar las entradas de php.ini en tiempo de ejecución! Es decir, se ejecutará cuando se ejecute el script! ¡Dulce!

error_reporting(E_ALL); ini_set("display_errors", "On");

¡Estas dos líneas harán el mismo efecto que alterando las entradas de php.ini como se mencionó anteriormente! ¡Increíble!

Todavía me sale una página en blanco / 500 error!

Eso significa que el script ni siquiera se había ejecutado! ¡Eso suele ocurrir cuando tienes un error de sintaxis!

Con los errores de sintaxis, el script ni siquiera llega al tiempo de ejecución. Falla en el momento de la compilación , lo que significa que usará los valores en php.ini, que si no hubiera cambiado, puede que no permita la visualización de errores.

Registros de errores

Además, PHP por defecto registra errores. En el alojamiento compartido, puede estar en una carpeta dedicada o en la misma carpeta que el script ofensivo.

Si tiene acceso a php.ini, puede encontrarlo en la entrada error_log .

Encuentro la programación en PHP bastante frustrante. Muy a menudo, intentaré ejecutar el script y volveré a aparecer una pantalla en blanco. No hay mensaje de error, solo pantalla vacía. La causa podría haber sido un simple error de sintaxis (corchete incorrecto, punto y coma faltante), una llamada de función fallida o algo completamente distinto.

Es muy difícil averiguar qué salió mal. Terminé comentando el código, ingresando declaraciones de "eco" en todas partes, etc. tratando de reducir el problema. Pero seguramente debe haber una mejor manera, ¿no ?.

Entonces, ¿hay una manera de hacer que PHP produzca un mensaje de error útil como lo hace Java? ¿Alguien puede recomendar buenos consejos, herramientas y técnicas de depuración de PHP?


Activar el informe de errores es la solución correcta, sin embargo, no parece tener efecto en el programa que lo enciende, pero solo en los programas incluidos posteriormente.

Por lo tanto, siempre creo un archivo / programa (que generalmente llamo "genwrap.php") que tiene esencialmente el mismo código que la solución popular aquí (es decir, activa el informe de errores) y también incluye la página que realmente quiero llamada.

Hay 2 pasos para implementar esta depuración;

Uno : crea genwrap.php y coloca este código en él:

<?php error_reporting(-1); ini_set(''display_errors'', ''On''); include($_REQUEST[''page'']); ?>

Dos : cambie el enlace al programa / página que desea depurar para ir a través de genwrap.php.

Ej: cambio:

$.ajax(''dir/pgm.php?param=val'').done(function(data) { /* ... */

a

$.ajax(''dir/genwrap.php?page=pgm.php&param=val'').done(function(data) { /* ... */


Además de las excelentes respuestas anteriores, también puede implementar las siguientes dos funciones en sus proyectos. Atraparán todos los errores no relacionados con la sintaxis antes de que salga la aplicación / script. Dentro de las funciones, puede hacer un seguimiento y registrar o enviar al público un mensaje agradable ''El sitio está en mantenimiento''.

Errores fatales:

register_shutdown_function

http://php.net/manual/en/function.register-shutdown-function.php

Errores:

set_error_handler

http://php.net/manual/en/function.set-error-handler.php

Backtracing:

debug_backtrace

http://php.net/manual/en/function.debug-backtrace.php


Además de todas las maravillosas respuestas aquí, me gustaría incluir una mención especial para las bibliotecas MySQLi y PDO.

A fin de que...

  1. Ver siempre los errores relacionados con la base de datos, y
  2. Evite verificar en los tipos de devolución los métodos para ver si algo salió mal.

La mejor opción es configurar las bibliotecas para lanzar excepciones .

MySQLi

Agrega esto cerca de la parte superior de tu script

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Es mejor ubicarlo antes de usar new mysqli() o mysqli_connect() .

DOP

Establezca el atributo PDO::ERRMODE_EXCEPTION en PDO::ERRMODE_EXCEPTION en su instancia de conexión. Usted puede hacer esto en el constructor.

$pdo = new PDO(''driver:host=localhost;...'', ''username'', ''password'', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]);

o después de la creación

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


Aparte de error_reporting y la configuración de display_errors ini, puede obtener errores de SYNTAX de los archivos de registro de su servidor web. Cuando estoy desarrollando PHP, cargo los registros del servidor web de mi sistema de desarrollo en mi editor. Cada vez que pruebo una página y aparece una pantalla en blanco, el archivo de registro queda obsoleto y mi editor me pregunta si quiero volver a cargarlo. Cuando lo hago, salto a la parte inferior y hay un error de sintaxis. Por ejemplo:

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D://webroot//test//test.php on line 9


En la parte superior de la página elija un parámetro.

error_reporting(E_ERROR | E_WARNING | E_PARSE);


Hay una extensión realmente útil llamada " xdebug " que también hará que sus informes sean mucho más agradables.


Las dos líneas clave que necesita para obtener errores útiles de PHP son:

ini_set(''display_errors'',1); error_reporting(E_ALL);

Como lo señalaron otros colaboradores, estos están desactivados por defecto por razones de seguridad. Como una sugerencia útil: cuando configura su sitio, es útil hacer un cambio para sus diferentes entornos para que estos errores estén activados de forma predeterminada en sus entornos locales y de desarrollo. Esto se puede lograr con el siguiente código (idealmente en su archivo index.php o config para que esté activo desde el principio):

switch($_SERVER[''SERVER_NAME'']) { // local case ''yourdomain.dev'': // dev case ''dev.yourdomain.com'': ini_set(''display_errors'',1); error_reporting(E_ALL); break; //live case ''yourdomain.com'': //... break; }



Los "ERRORES" son las cosas más útiles para que los desarrolladores conozcan sus errores y los resuelvan para que el sistema funcione a la perfección.

PHP proporciona algunas de las mejores formas de conocer a los desarrolladores por qué y dónde se encuentran los errores en su parte del código, por lo que al conocer esos errores, los desarrolladores pueden mejorar su código de muchas maneras.

Las mejores formas de escribir siguiendo dos líneas en la parte superior del script para obtener todos los mensajes de error:

error_reporting(E_ALL); ini_set("display_errors", 1);

Otra forma de utilizar herramientas de depuración como Xdebug en su IDE.


Mi problema habitual son los errores "pequeños, estúpidos" del analizador que, lamentablemente, no aparecen.

Sin embargo, cuando un archivo .PHP incluye un archivo que tiene errores de analizador, se muestran. Así que tuve la idea de escribir un pequeño "ejecutor-script" que se inicia con el nombre del archivo con errores como argumento, es decir, example.com/sx.php?sc=buggy.php

Ya me había salvado de muchos dolores de cabeza, tal vez también sea útil para otra persona :)

sx.php

$sc = $_GET["sc"]; if ((!isset($_GET["sc"]) && empty($_GET["sc"]))) { echo "Please select file to execute using ?sc= (you may omit the .PHP-extension)"; } else { $sc = $_GET["sc"]; if (false==stripos(''.php'',$sc)) $sc.=''.php''; // adjust this if your preferred extension is php5! require($sc); } ?>


Para activar el informe completo de errores, agregue esto a su script:

error_reporting(E_ALL);

Esto hace que aparezcan advertencias mínimas. Y, por si acaso:

ini_set(''display_errors'', ''1'');

Forzará la visualización de errores. Esto debería desactivarse en los servidores de producción, pero no cuando se está desarrollando.


Para los errores de sintaxis, debe habilitar la visualización de errores en php.ini. De forma predeterminada, están desactivados porque no desea que un "cliente" vea los mensajes de error. Consulte esta página en la documentación de PHP para obtener información sobre las 2 directivas: error_reporting y display_errors . display_errors es probablemente el que quieres cambiar. Si no puede modificar el php.ini, también puede agregar las siguientes líneas a un archivo .htaccess:

php_flag display_errors on php_value error_reporting 2039

Es posible que desee considerar el uso del valor de E_ALL (como lo menciona Gumbo) para su versión de PHP para que error_reporting obtenga todos los errores. más información

Otros 3 elementos: (1) Puede revisar el archivo de registro de errores, ya que tendrá todos los errores (a menos que se haya deshabilitado el registro). (2) Agregar las siguientes 2 líneas lo ayudará a depurar errores que no sean errores de sintaxis:

error_reporting(-1); ini_set(''display_errors'', ''On'');

(3) Otra opción es usar un editor que compruebe si hay errores al escribir, como PhpEd . PhpEd también viene con un depurador que puede proporcionar información más detallada. (El depurador PhpEd es muy similar a xdebug y se integra directamente en el editor, por lo que utiliza 1 programa para hacer todo).

El link de Cartman también es muy bueno: link


Para persistir y hacer que sea confortale, puede editar su archivo php.ini. Normalmente se almacena en /etc/php.ini o /etc/php/php.ini , pero los php.ini más locales pueden sobrescribirlo, según las pautas de configuración de su proveedor de alojamiento. Verifique un archivo phpinfo() para el Loaded Configuration File en la parte superior, para asegurarse de que el último se carga.

Buscar display_errors en ese archivo. Solo debe haber 3 instancias, de las cuales 2 están comentadas.

Cambia la línea sin comentarios a:

display_errors = stdout


Para una solución de problemas rápida y práctica, normalmente sugiero aquí en SO:

error_reporting(~0); ini_set(''display_errors'', 1);

que se colocará al comienzo del guión que está bajo resolución de problemas. Esto no es perfecto, la variante perfecta es que también habilita eso en php.ini y que registra los errores en PHP para detectar los errores de sintaxis y de inicio.

Los ajustes descritos aquí muestran todos los errores, avisos y advertencias, incluidos los estrictos, independientemente de la versión de PHP.

Las siguientes cosas a considerar:

  • Instale Xdebug y habilite la depuración remota con su IDE.

Ver también:



Puede habilitar el informe completo de errores (incluidos avisos y mensajes estrictos). Algunas personas encuentran esto demasiado detallado, pero vale la pena intentarlo. Establezca error_reporting en E_ALL | E_STRICT E_ALL | E_STRICT en su php.ini.

error_reporting = E_ALL | E_STRICT

E_STRICT le notificará sobre funciones en desuso y le dará recomendaciones sobre los mejores métodos para realizar ciertas tareas.

Si no desea avisos, pero le resultan útiles otros tipos de mensajes, intente excluirlos:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

También asegúrese de que display_errors esté habilitado en php.ini. Si su versión de PHP es anterior a 5.2.4, configúrela en On :

display_errors = "On"

Si su versión es 5.2.4 o más reciente, use:

display_errors = "stderr"


Puede incluir las siguientes líneas en el archivo que desea depurar:

error_reporting(E_ALL); ini_set(''display_errors'', ''1'');

Esto anula la configuración predeterminada en php.ini, que solo hace que PHP informe los errores al registro.


Puedes registrar tu propio controlador de errores en PHP. Volcar todos los errores en un archivo podría ayudarlo en estos casos poco claros, por ejemplo. Tenga en cuenta que se llamará a su función, sin importar cuál sea su error_reporting actual. Ejemplo muy básico:

function dump_error_to_file($errno, $errstr) { file_put_contents(''/tmp/php-errors'', date(''Y-m-d H:i:s - '') . $errstr, FILE_APPEND); } set_error_handler(''dump_error_to_file'');


Recomiendo a Nette Tracy para una mejor visualización de errores y excepciones en PHP:


Si eres super genial, puedes intentar:

$test_server = $_SERVER[''SERVER_NAME''] == "127.0.0.1" || $_SERVER[''SERVER_NAME''] == "localhost" || substr($_SERVER[''SERVER_NAME''],0,3) == "192"; ini_set(''display_errors'',$test_server); error_reporting(E_ALL|E_STRICT);

Esto solo mostrará errores cuando esté ejecutando localmente. También le proporciona la variable test_server para usar en otros lugares donde sea apropiado.

Cualquier error que ocurra antes de que se ejecute el script no se detectará, pero para el 99% de los errores que cometo, eso no es un problema.


Si usted es un usuario de Ubuntu, vaya a su terminal y ejecute este comando

sudo tail -50f /var/log/apache2/error.log

donde mostrará los últimos 50 errores. Hay un archivo de error error.log para apache2 que registra todos los errores.


También es posible que desee probar PHPStorm como su editor de código. Encontrará muchos errores de sintaxis de PHP y de otro tipo a medida que escribe en el editor.



http://todell.com/debug puede ser útil también. Puede ver los valores de sus objetos o errores de depuración lanzados detrás de la escena incluso en el modo de producción.



error_reporting(E_ALL | E_STRICT); ini_set(''display_errors'', 1); ini_set(''html_errors'', 1);

Además, puede obtener información más detallada con xdebug .


error_reporting(E_ALL | E_STRICT);

Y encienda los errores de visualización en php.ini


ini_set(''display_errors'', 1); ini_set(''display_startup_errors'', 1); error_reporting(E_ALL);