Mostrando todos los errores y advertencias [duplicado]
ACTUALIZACIÓN 2:
Ahora eliminé lo siguiente del archivo .php:
<?php error_reporting( E_ALL ); ?>
He configurado display_erros en php.ini de la siguiente manera:
display_errors = Activado
El informe de errores está configurado de la siguiente manera en php.ini
:
informe_error = E_ALL | E_ESTRICT
Después de reiniciar Apache, sigo sin recibir errores ni advertencias.
ACTUALIZACIÓN 1:
He cambiado error_reporting desde php.ini
:
error_reporting = E_ALL & ~E_DEPRECATED
a
informe_error = E_ALL | E_ESTRICT
Después de lo cual reinicié Apache, por ejemplo
/etc/init.d/apache2 reiniciar
Pero la página seguirá sin mostrar errores/advertencias de ningún tipo.
PREGUNTA ORIGINAL:
El siguiente script genera una advertencia porque $err está dentro de la declaración if. ¿Por qué no se muestra esta advertencia en la página PHP de un navegador web?
Tengo que mirar los registros de Apache para ver la advertencia. Además, si cambio deliberadamente "insertar en" por "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>
Los errores de visualización se pueden desactivar en el php.ini
archivo de configuración de Apache.
Puedes activarlo en el script:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Deberías ver los mismos mensajes en el registro de errores de PHP.
Pude obtener todos los errores a través del siguiente código:
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);