Διαχείριση Σφαλμάτων στο PHP
- Προηγούμενη Σελίδα PHP Ασφαλής E-mail
- Επόμενη Σελίδα PHP Εξαιρέσεις
In PHP, the default error handling is simple. A message is sent to the browser, which includes the filename, line number, and a description of the error.
Διαχείριση Σφαλμάτων στο PHP
Στη δημιουργία κώδικα και web εφαρμογών, η διαχείριση σφαλμάτων είναι μια σημαντική πτυχή. Αν ο κώδικας σας λείπει κώδικας αναγνώρισης σφαλμάτων, ο κώδικας σας φαίνεται λιγότερο επαγγελματικός και ανοίγει πόρτες για κινδύνους ασφαλείας.
Αυτό το教程 περιγράφει μερικές από τις πιο σημαντικές μεθόδους αναγνώρισης σφαλμάτων στο PHP.
Θα σας εξηγήσουμε διαφορετικές μεθόδους διαχείρισης σφαλμάτων:
- Απλή κατάσταση "die()"
- Προσαρμοσμένα σφάλματα και διαγνωστές
- Αναφορά σφαλμάτων
Βασική διαχείριση σφαλμάτων: χρήση της συνάρτησης die()
Πρώτος παράδειγμα: απλός κώδικας ανοίγματος αρχείου κειμένου
<?php $file=fopen("welcome.txt","r"); ?>
Αν το αρχείο δεν υπάρχει, θα λάβετε ένα σφάλμα όπως αυτό:
Προειδοποίηση: fopen(welcome.txt) [λειτουργία fopen]: απέτυχε να ανοίξει ροή: Δεν υπάρχει αρχείο ή φάκελος στο C:\webfolder\test.php γραμμή 2
Για να αποφύγουμε την παροχή μηνυμάτων σφαλμάτων όπως τα παραπάνω, ελέγχουμε την ύπαρξη του αρχείου πριν την πρόσβαση σε αυτό:
<?php if(!file_exists("welcome.txt")) { die("Αρχείο μη ευρετό"); } άλλως { $file=fopen("welcome.txt","r"); } ?>
Τώρα, αν το αρχείο δεν υπάρχει, θα λάβετε ένα μήνυμα σφάλματος όπως αυτό:
Αρχείο μη ευρετό
Το παρακάτω κώδικας είναι πιο αποτελεσματικός από τον προηγούμενο, λόγω της απλής μηχανικής διαχείρισης σφαλμάτων που τερματίζει το σκοπό μετά το σφάλμα.
Ωστόσο, η απλή διακοπή του σκοπού δεν είναι πάντα η κατάλληλη μέθοδος. Ας μελετήσουμε τις εναλλακτικές φιλοσοφίες των PHP για τη διαχείριση σφαλμάτων.
Δημιουργία προσαρμοσμένου διαχειριστή σφαλμάτων
Η δημιουργία ενός προσαρμοσμένου διαχειριστή σφαλμάτων είναι πολύ απλή. Διαθέτουμε απλώς μια ειδική συνάρτηση που μπορεί να καλείται όταν προκύπτει σφάλμα στο PHP.
Η συνάρτηση πρέπει να έχει την ικανότητα να χειρίζεται τουλάχιστον δύο παραμέτρους (επίπεδο σφάλματος και μήνυμα σφάλματος), αλλά μπορεί να αποδεχτεί μέχρι πέντε παραμέτρους (προαιρετικές: αρχείο, αριθμός γραμμής και περιεχόμενο σφάλματος):
Γλώσσα διαδικασίας
error_function(error_level, error_message, error_file, error_line, error_context)
Παράμετροι | Περιγραφή |
---|---|
error_level | Απαιτείται. Προκαθορισμένα επίπεδα αναφοράς σφαλμάτων για χρήστες. Πρέπει να είναι αριθμητικό. Δείτε το παρακάτω πίνακα: επίπεδα αναφοράς σφαλμάτων. |
error_message | Απαιτείται. Προκαθορισμένα μηνύματα σφαλμάτων για χρήστες. |
error_file | Προαιρετικό. Ορίζει το όνομα του αρχείου όπου συνέβη το σφάλμα. |
error_line | Προαιρετικό. Ορίζει τον αριθμό της γραμμής όπου συνέβη το σφάλμα. |
error_context | Προαιρετικό. Ορίζει μια λίστα που περιλαμβάνει όλες τις μεταβλητές που χρησιμοποιούνται κατά τη διάρκεια της σφάλματος και τις τιμές τους. |
Επίπεδα αναφοράς σφαλμάτων
Αυτά τα επίπεδα αναφοράς σφαλμάτων είναι διαφορετικοί τύποι σφαλμάτων που ο διαχειριστής σφαλμάτων σκοπεύει να χειριστεί:
Αξία | Σταθερά | Περιγραφή |
---|---|---|
2 | E_WARNING | Μη θανατηφόρα σφάλματα εκτέλεσης. Δεν σταματά την εκτέλεση του σκευασίου. |
8 | E_NOTICE | Ειδοποιήσεις εκτέλεσης. Το σκεύασιο ανακαλύπτει ότι μπορεί να συμβεί σφάλμα, αλλά μπορεί να συμβεί και κατά τη διάρκεια της κανονικής εκτέλεσης του σκευασίου. |
256 | E_USER_ERROR | Θανάτηφόρα σφάλματα χρήστη. Ξ彷ηλιζεται η E_ERROR που ο προγραμματιστής ορίζει με τη χρήση της συνάρτησης trigger_error() του PHP. |
512 | E_USER_WARNING | Μη θανατηφόρα προειδοποιήσεις χρήστη. Ξ彷ηλιζεται η E_WARNING που ο προγραμματιστής ορίζει με τη χρήση της συνάρτησης trigger_error() του PHP. |
1024 | E_USER_NOTICE | Αναφορές χρήστη. Ξ彷ηλιζεται η E_NOTICE που ο προγραμματιστής ορίζει με τη χρήση της συνάρτησης trigger_error() του PHP. |
4096 | E_RECOVERABLE_ERROR | Κατάλληλα για συλλογή θανατηφόρα σφάλματα. Ξ彷ηλιζεται το E_ERROR, αλλά μπορεί να συλλεχθεί από τον προσαρμοσμένο διαχειριστή σφαλμάτων του χρήστη. (Δείτε set_error_handler()) |
8191 | E_ALL | Όλα τα σφάλματα και οι προειδοποιήσεις, εκτός από το επίπεδο E_STRICT. (Στο PHP 6.0, το E_STRICT είναι μέρος του E_ALL) |
Τώρα, ας δημιουργήσουμε μια συνάρτηση για τη διαχείριση σφαλμάτων:
function customError($errno, $errstr) { echo "<b>Sφάλμα:</b> [$errno] $errstr<br />"; echo "Τέλος Σκрипτού"; die(); }
Το παραπάνω κώδικας είναι μια απλή συνάρτηση διαχείρισης σφαλμάτων. Όταν εκτελείται, αποκτά το επίπεδο σφάλματος και το μήνυμα σφάλματος. Στη συνέχεια, εκτυπώνει το επίπεδο σφάλματος και το μήνυμα και σταματά το σκεύασιο.
Τώρα, έχουμε δημιουργήσει μια συνάρτηση διαχείρισης σφαλμάτων, πρέπει να καθορίσουμε πότε θα εκτελεστεί αυτή η συνάρτηση.
Set Error Handler
Ο προεπιλεγμένος διαχειριστής σφαλμάτων του PHP είναι ο ενσωματωμένος διαχειριστής σφαλμάτων. Θέλουμε να μετατρέψουμε τη συνάρτηση παραπάνω σε τον προεπιλεγμένο διαχειριστή σφαλμάτων κατά τη διάρκεια της εκτέλεσης του σκευασίου.
Μπορείτε να τροποποιήσετε τον διαχειριστή σφαλμάτων, ώστε να εφαρμόζεται μόνο σε ορισμένα σφάλματα, έτσι ώστε το σενάριο να χειρίζεται διαφορετικά σφάλματα με διαφορετικό τρόπο. Ωστόσο, σε αυτό το παράδειγμα, θέλουμε να χρησιμοποιήσουμε τον προσαρμοσμένο διαχειριστή σφαλμάτων μας για όλες τις σφάλματα:
set_error_handler("customError");
Γιατί εμείς θέλουμε οι προσαρμοσμένες μας συναρτήσεις να χειρίζονται όλες τις σφάλματα, η set_error_handler() χρειάζεται μόνο έναν παράγοντα, μπορεί να προσθέσει δεύτερο παράγοντα για να καθορίσει το επίπεδο σφάλματος.
Παράδειγμα
Για να δοκιμάσουμε αυτόν τον διαχειριστή σφαλμάτων, να αναφέρουμε μια μη υπαρκτή μεταβλητή:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Sφάλμα:</b> [$errno] $errstr"; } //set error handler set_error_handler("customError"); //trigger error echo($test); ?>
Η έξοδος του παρακάτω κώδικα πρέπει να είναι παρόμοια με αυτή:
Σφάλμα: [8] Ανεπιθύμητη μεταβλητή: test
Ενεργοποίηση Σφάλματος
Στο σημείο εισαγωγής δεδομένων χρήστη στο σενάριο, όταν το δεδομένο του χρήστη είναι μη έγκυρο, η ενεργοποίηση σφαλμάτων είναι πολύ χρήσιμη. Στο PHP, αυτή τη δουλειά την εκτελεί η συνάρτηση trigger_error().
Παράδειγμα
Σε αυτό το παράδειγμα, αν η μεταβλητή "test" είναι μεγαλύτερη από το "1", θα προκύψει σφάλμα:
<?php $test=2; if ($test>1) { trigger_error("Η τιμή πρέπει να είναι 1 ή κάτω από αυτήν"); } ?>
Η έξοδος του παρακάτω κώδικα πρέπει να είναι παρόμοια με αυτή:
Ειδοποίηση: Η τιμή πρέπει να είναι 1 ή κάτω από αυτήν σε C:\webfolder\test.php στη γραμμή 6
Μπορείτε να ενεργοποιήσετε σφάλματα σε οποιοδήποτε σημείο του σκεπτού, μέσω του δεύτερου παραμέτρου μπορείτε να καθορίσετε το επίπεδο σφάλματος που ενεργοποιείτε.
Πιθανά τύποι σφαλμάτων:
- E_USER_ERROR - Καταστροφικό σφάλμα runtime από χρήστη. Το σφάλμα δεν μπορεί να αποκατασταθεί. Το σενάριο διακοπεί.
- E_USER_WARNING - Ανεπιβίωτο σφάλμα runtime από χρήστη. Το σενάριο δεν διακοπεί.
- E_USER_NOTICE - Προεπιλεγμένο. Ειδοποιήσεις runtime από χρήστη. Το σενάριο εντοπίζει πιθανά σφάλματα, αλλά μπορεί να συμβεί και όταν το σενάριο εκτελείται κανονικά.
Παράδειγμα
Σε αυτό το παράδειγμα, αν η μεταβλητή "test" είναι μεγαλύτερη από το "1", θα προκύψει το σφάλμα E_USER_WARNING. Αν προκύψει το E_USER_WARNING, θα χρησιμοποιήσουμε τον προσαρμοσμένο διαχειριστή σφαλμάτων μας και θα τελειώσουμε το σενάριο:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Sφάλμα:</b> [$errno] $errstr<br />"; echo "Τέλος Σκрипτού"; die(); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("Η τιμή πρέπει να είναι 1 ή κάτω από αυτή",E_USER_WARNING); } ?>
Η έξοδος του παρακάτω κώδικα πρέπει να είναι παρόμοια με αυτή:
Σφάλμα: [512] Η τιμή πρέπει να είναι 1 ή κάτω από αυτή Τέλος Σκрипτού
Τώρα, έχουμε μάθει πώς να δημιουργήσουμε το δικό μας error και πώς να τα ενεργοποιήσουμε, ας μελετήσουμε τώρα την καταγραφή σφαλμάτων.
Καταγραφή Σφαλμάτων
Προεπιλεγμένα, ανάλογα με τη ρύθμιση του error_log στο php.ini, το PHP στέλνει καταγραφές σφαλμάτων στο σύστημα καταγραφής σφαλμάτων του διακομιστή ή σε αρχείο. Με τη χρήση της συνάρτησης error_log(), μπορείτε να στείλετε καταγραφές σφαλμάτων σε συγκεκριμένα αρχεία ή απομακρυσμένα προορισμούς.
Η αποστολή ενός μηνύματος σφάλματος στον εαυτό σας μέσω e-mail είναι μια καλή μέθοδος για να αποκτήσετε ειδοποιήσεις για συγκεκριμένα σφάλματα.
Με το E-Mail να στείλετε μήνυμα σφάλματος
Στο παρακάτω παράδειγμα, αν συμβεί συγκεκριμένο σφάλμα, θα στείλουμε e-mail με το μήνυμα σφάλματος και θα τελειώσουμε το σενάριο:
<?php //error handler function function customError($errno, $errstr) { echo "<b>Sφάλμα:</b> [$errno] $errstr<br />"; echo "Ο διαχειριστής ιστοσελίδας έχει ενημερωθεί"; error_log("Σφάλμα: [$errno] $errstr",1, "someone@example.com","From: webmaster@example.com"); } //set error handler set_error_handler("customError",E_USER_WARNING); //trigger error $test=2; if ($test>1) { trigger_error("Η τιμή πρέπει να είναι 1 ή κάτω από αυτή",E_USER_WARNING); } ?>
Η έξοδος του παρακάτω κώδικα πρέπει να είναι παρόμοια με αυτή:
Σφάλμα: [512] Η τιμή πρέπει να είναι 1 ή κάτω από αυτή Ο διαχειριστής ιστοσελίδας έχει ενημερωθεί
Το e-mail που λαμβάνεται από τον παρακάτω κώδικα είναι παρόμοιο με αυτό:
Σφάλμα: [512] Η τιμή πρέπει να είναι 1 ή κάτω από αυτή
Αυτή η μέθοδος δεν είναι κατάλληλη για όλες τις σφάλματα. Τα συνηθισμένα σφάλματα πρέπει να καταγράφονται στο διακομιστή χρησιμοποιώντας το προεπιλεγμένο σύστημα καταγραφής σφαλμάτων του PHP.
- Προηγούμενη Σελίδα PHP Ασφαλής E-mail
- Επόμενη Σελίδα PHP Εξαιρέσεις