Εμφάνιση όλων των σφαλμάτων και των προειδοποιήσεων
ΠΡΟΗΓΟΥΜΕΝΗ ΕΝΗΜΕΡΩΣΗ 2:
Έχω πλέον αφαιρέσει τα ακόλουθα από το αρχείο .php:
<?php error_reporting( E_ALL ); ?>
Έχω ρυθμίσει το display_erros στο php.ini ως εξής:
display_errors = On
Η αναφορά σφαλμάτων έχει οριστεί ως εξής στο αρχείο php.ini
:
error_reporting = E_ALL | E_STRICT
Μετά την επανεκκίνηση του Apache, εξακολουθώ να μην λαμβάνω σφάλματα/προειδοποιήσεις.
ΠΡΟΗΓΗΣΗ 1:
Άλλαξα την αναφορά σφαλμάτων στο αρχείο php.ini
από:
error_reporting = E_ALL &, ~E_DEPRECATED
σε
error_reporting = E_ALL | E_STRICT
Μετά από αυτό έκανα επανεκκίνηση του Apache, π.χ.
/etc/init.d/apache2 restart
Αλλά η σελίδα εξακολουθεί να μην εμφανίζει λάθη/προειδοποιήσεις οποιουδήποτε είδους.
ΑΡΧΙΚΉ ΕΡΏΤΗΣΗ:
Το ακόλουθο σενάριο παράγει μια προειδοποίηση επειδή το $err βρίσκεται μέσα στην εντολή if. Γιατί αυτή η προειδοποίηση δεν εμφανίζεται στη σελίδα PHP σε ένα πρόγραμμα περιήγησης ιστού;
Πρέπει να κοιτάξω τα αρχεία καταγραφής του Apache για να δω την προειδοποίηση. Επίσης, αν αλλάξω σκόπιμα το "insert into" σε "delete into", δεν εμφανίζεται σφάλμα στη σελίδα PHP. Γιατί τα σφάλματα δεν εμφανίζονται στην πραγματική σελίδα PHP;
<?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>
Η εμφάνιση σφαλμάτων μπορεί να απενεργοποιηθεί στο αρχείο ρυθμίσεων του Apache ή στο αρχείο
php.ini
.Μπορείτε να το ενεργοποιήσετε στο σενάριο:
Θα πρέπει να δείτε τα ίδια μηνύματα στο αρχείο καταγραφής σφαλμάτων της PHP.
Κατευθείαν από το αρχείο php.ini:
Για καθαρή ανάπτυξη επιλέγω:
Επίσης μην ξεχάσετε να βάλετε το display_errors στο on
Μετά από αυτό, επανεκκινήστε τον διακομιστή σας για τον Apache στο Ubuntu:
Ορίστε τα στο
php.ini
:Από τη σελίδα PHP σας, χρησιμοποιήστε ένα κατάλληλο φίλτρο για την αναφορά σφαλμάτων.
Τα φίλτρα μπορούν να κατασκευαστούν ανάλογα με τις απαιτήσεις.