2011-03-25 25 views
270

ACTUALIZACIÓN 2:Mostrando todos los errores y advertencias

ahora han eliminado las siguientes opciones en el archivo .php: display_erros

<?php error_reporting(E_ALL); ?> 

he puesto en php.ini de la siguiente manera:

display_errors = On

el informe de errores se establece en lo siguiente en php.ini

error_reporting = E_ALL | E_STRICT

Después de reiniciar Apache, sigo sin recibir ningún error/advertencia.

ACTUALIZACIÓN 1:

he cambiado en php.ini error_reporting de:

error_reporting = E_ALL & ~ E_DEPRECATED

a

error_reporting = E_ALL | E_STRICT

Después de lo cual reinicié Apache, p.

/etc/init.d/apache2 restart

pero la página sigue sin mostrar errores/advertencias de ningún tipo.

pregunta original:

La siguiente secuencia de comandos está generando una advertencia porque el $ err estar dentro de la sentencia if. ¿Por qué esta advertencia no se muestra en la página php en un navegador web? Tengo que mirar los registros de apache para ver la advertencia. Además, si cambio deliberadamente la "inserción en" para "eliminar en", no muestra un error en la página php. ¿Por qué los errores no se muestran en la página php real?

<?php 
    error_reporting(E_ALL); 
?> 

<html> 
    <head> 
     <title></title> 
     <link rel="icon" type="image/png" href="favicon.ico"> 

     <?php 
      if($_SERVER['REQUEST_METHOD']=='POST') { 
       $err = array(); 

       if(empty($_POST['display_name'])) $err[] = "display name field is required"; 
       if(empty($_POST['email'])) $err[] = "email field is required"; 
       if(empty($_POST['password'])) $err[] = "password field is required"; 

       if(!$err) { 
        try { 
         $DBH = new PDO("mysql:host=localhost;dbname=database1", "user", "pass"); 
         $DBH -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

         $STH = $DBH -> prepare("delete into table1 (display_name, email, password) values (:display_name, :email, :password)"); 

         $STH -> bindParam(':display_name', $_POST['display_name'], PDO::PARAM_STR, 100); 
         $STH -> bindParam(':email', $_POST['email'], PDO::PARAM_STR, 100); 
         $STH -> bindParam(':password', $_POST['password'], PDO::PARAM_STR, 100); 

         $STH -> execute(); 

         $STH = $DBH -> prepare("delete into table2 (username, status, users_id) values (:username, :status, :users_id)"); 

         $strStatus = 1; 

         $STH -> bindParam(':username', $_POST['display_name'], PDO::PARAM_STR, 100); 
         $STH -> bindParam(':status', $strStatus, PDO::PARAM_INT, 1); 
         $STH -> bindParam(':users_id', $_POST['referer'], PDO::PARAM_INT, 1); 

         $STH -> execute(); 

         $DBH = null; 
        } catch(PDOException $e) { 
         echo $e -> getMessage(); 
        } 

        header("Location: ".$_SERVER['PHP_SELF']); 
        exit; 
       } else { 
        foreach($_POST as $key => $val) { 
         $form[$key] = htmlspecialchars($val); 
        } 
       } 
      } else { 
       $form['display_name'] = $form['email'] = $form['password'] = ''; 
      } 
     ?> 
    </head> 

    <body> 
     <?php foreach($err as $line) { ?> 
     <div style="error"><?php echo $line; ?></div> 
     <?php } ?> 

     <h1>register</h1> 

     <form method="post"> 
      referers id:<br /> 
      <input type="text" name="referer" /><br /><br /> 

      name:<br /> 
      <input type="text" name="display_name" value="<?php echo $form['display_name']; ?>" /><br /><br /> 

      email:<br /> 
      <input type="text" name="email" value="<?php echo $form['email']; ?>" /><br /><br /> 

      password:<br /> 
      <input type="text" name="password" value="<?php echo $form['password']; ?>" /><br /><br /> 

      <input type="submit" value="register" /> 
     </form> 
    </body> 
</html> 
+1

¿Cuál es el valor actual de la configuración de ['display_errors'] (http://php.net/display_errors) INI? – salathe

+0

Acabo de verificar y está configurado en error_reporting = E_ALL & ~ E_DEPRECATED – oshirowanen

+0

Por favor, vuelva a leer mi pregunta, ya conocemos su configuración 'error_reporting' porque está en el script. – salathe

Respuesta

773

errores de visualización podrían estar apagados en el php.ini o su archivo de configuración de Apache.

Puede activarlo en el guión:

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

debería ver los mismos mensajes en el registro de errores de PHP.

+1

¿Necesito? reiniciar Apache después de cambiar el archivo php.ini? – oshirowanen

+1

ya se ha publicado esta pregunta http://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display – Elangovan

+2

@oshirowanen 'ini_set()' en realidad no cambia el 'php. ini' file, el script solo "actúa" de la misma manera que en 'php.ini' ... ** Del manual: **' Establece el valor de la opción de configuración dada. La opción de configuración mantendrá este nuevo valor '*' durante la ejecución del script' * ', y' ** 'se restaurará en el final del script' **' .' –

34

Directamente desde el php.ini:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
; Error handling and logging ; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

; This directive informs PHP of which errors, warnings and notices you would like 
; it to take action for. The recommended way of setting values for this 
; directive is through the use of the error level constants and bitwise 
; operators. The error level constants are below here for convenience as well as 
; some common settings and their meanings. 
; By default, PHP is set to take action on all errors, notices and warnings EXCEPT 
; those related to E_NOTICE and E_STRICT, which together cover best practices and 
; recommended coding standards in PHP. For performance reasons, this is the 
; recommend error reporting setting. Your production server shouldn't be wasting 
; resources complaining about best practices and coding standards. That's what 
; development servers and development settings are for. 
; Note: The php.ini-development file has this setting as E_ALL. This 
; means it pretty much reports everything which is exactly what you want during 
; development and early testing. 
; 
; Error Level Constants: 
; E_ALL    - All errors and warnings (includes E_STRICT as of PHP 5.4.0) 
; E_ERROR   - fatal run-time errors 
; E_RECOVERABLE_ERROR - almost fatal run-time errors 
; E_WARNING   - run-time warnings (non-fatal errors) 
; E_PARSE   - compile-time parse errors 
; E_NOTICE   - run-time notices (these are warnings which often result 
;      from a bug in your code, but it's possible that it was 
;      intentional (e.g., using an uninitialized variable and 
;      relying on the fact it is automatically initialized to an 
;      empty string) 
; E_STRICT   - run-time notices, enable to have PHP suggest changes 
;      to your code which will ensure the best interoperability 
;      and forward compatibility of your code 
; E_CORE_ERROR  - fatal errors that occur during PHP's initial startup 
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's 
;      initial startup 
; E_COMPILE_ERROR - fatal compile-time errors 
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) 
; E_USER_ERROR  - user-generated error message 
; E_USER_WARNING - user-generated warning message 
; E_USER_NOTICE  - user-generated notice message 
; E_DEPRECATED  - warn about code that will not work in future versions 
;      of PHP 
; E_USER_DEPRECATED - user-generated deprecation warnings 
; 
; Common Values: 
; E_ALL (Show all errors, warnings and notices including coding standards.) 
; E_ALL & ~E_NOTICE (Show all errors, except for notices) 
; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) 
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) 
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED 
; Development Value: E_ALL 
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT 
; http://php.net/error-reporting 
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT 

Para el desarrollo puro voy por:

error_reporting = E_ALL^E_NOTICE^E_WARNING 

Asimismo, no se olvide de poner a display_errors en

display_errors = On 

Después de que reinicie el servidor para Apache en Ubuntu :

sudo /etc/init.d/apache2 restart 
+3

"PHP 6.0.0"? Heh :-) – Bell

5

conjunto t stos en php.ini

;display_startup_errors = On 
display_startup_errors=off 
display_errors =on 
html_errors= on 

Desde su página php uso filtro adecuado para el informe de errores.

error_reporting(E_ALL); 

Los archivadores se pueden hacer de acuerdo con los requisitos.

E_ALL 
E_ALL | E_STRICT 
17

que era capaz de conseguir todo error a través de abajo código: -

ini_set('display_startup_errors',1); 
ini_set('display_errors',1); 
error_reporting(-1); 
7

errores de PHP se pueden mostrar como cualquiera de los métodos siguientes:

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

Para más detalles:

http://www.howtofindit.in/displaying-php-errors/

+4

El 'display_errors = on;' en el archivo PHP tiene 'error de sintaxis'. –

Cuestiones relacionadas