web-dev-qa-db-fra.com

Afficher toutes les erreurs et les avertissements

PDATE 2:

J'ai maintenant supprimé les éléments suivants du fichier .php:

<?php error_reporting( E_ALL ); ?>

J'ai défini display_erros dans php.ini comme suit:

display_errors = On

Le rapport d'erreur est défini comme suit dans php.ini:

error_reporting = E_ALL | E_STRICT

Après avoir redémarré Apache, je ne reçois toujours aucune erreur ni aucun avertissement.

PDATE 1:

J'ai changé error_reporting dans php.ini de:

error_reporting = E_ALL & ~ E_DEPRECATED

à

error_reporting = E_ALL | E_STRICT

Après quoi, j'ai redémarré Apache, par exemple.

/etc/init.d/Apache2 restart

Mais la page n’affiche toujours pas d’erreurs/avertissements de quelque nature que ce soit.

QUESTION ORIGINALE:

Le script suivant génère un avertissement car $ err est dans l’instruction if. Pourquoi cet avertissement ne s'affiche-t-il pas sur la page PHP d'un navigateur Web?

Je dois regarder les journaux Apache pour voir l'avertissement. De plus, si je remplace délibérément "insérer dans" par "supprimer dans", la page PHP ne s'affiche pas. Pourquoi les erreurs ne s'affichent-elles pas sur la page PHP actuelle?

<?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>
386
oshirowanen

Les erreurs d'affichage pourraient être désactivées dans php.ini ou dans votre fichier de configuration Apache.

Vous pouvez l'activer dans le script:

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

Vous devriez voir les mêmes messages dans le journal des erreurs PHP.

1080
txyoji

Directement du fichier 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

Pour le développement pur, je choisis:

error_reporting = E_ALL ^ E_NOTICE ^ E_WARNING

Aussi, n'oubliez pas de mettre display_errors sur

display_errors = On

Après cela, redémarrez votre serveur pour Apache sur Ubuntu:

Sudo /etc/init.d/Apache2 restart
40
John Magnolia

J'ai pu obtenir toutes les erreurs via le code ci-dessous:

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
37
Rajesh Patel

Les erreurs PHP peuvent être affichées avec l’une des méthodes ci-dessous:

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

Pour plus de détails:

Affichage de PHP erreurs

28
vkp

Définissez-les sur php.ini:

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

Depuis votre page PHP, utilisez un filtre approprié pour signaler les erreurs.

error_reporting(E_ALL);

Les déposants peuvent être créés selon les besoins.

E_ALL
E_ALL | E_STRICT
9
rinjan

Vous pouvez voir une description détaillée ici .

ini_set('display_errors', 1);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

Changelog

  • 5.4.0 E_STRICT est devenu une partie de E_ALL

  • 5.3.0 Introduit E_DEPRECATED et E_USER_DEPRECATED.

  • 5.2.0 E_RECOVERABLE_ERROR introduit.

  • 5.0.0 E_STRICT introduit (ne fait pas partie de E_ALL).

3
Suresh Maurya