«Υπάρχει κάποιο κρίσιμο σφάλμα σε αυτή την ιστοσελίδα»: τι σημαίνει και πώς διορθώνεται
Διαβάστε το πραγματικό σφάλμα PHP πίσω από το αόριστο μήνυμα, βρείτε το πρόσθετο ή το θέμα που το προκάλεσε και ξαναμπείτε στο wp-admin χωρίς το email ανάκτησης.
Δημοσιεύτηκε
Αυτό το μήνυμα σημαίνει ότι η PHP συνάντησε fatal error ενώ έχτιζε τη σελίδα σας, και το WordPress το έπιασε πριν καταλήξει σε λευκή οθόνη. Το σφάλμα είναι υπαρκτό, συγκεκριμένο και καταγεγραμμένο — απλώς το WordPress αρνείται να το τυπώσει στον browser, γιατί ένα stack trace σε δημόσια σελίδα αποκαλύπτει διαδρομές αρχείων και κώδικα σε όποιον την επισκεφθεί.
Άρα η λύση δεν είναι ποτέ μαντεψιά. Είναι: διαβάστε το πραγματικό σφάλμα και μετά κάντε ό,τι λέει.
Τι συμβαίνει στην πραγματικότητα
Από το WordPress 5.2 και μετά υπάρχει ενσωματωμένος στον πυρήνα ένας χειριστής fatal errors. Όταν η PHP πεθαίνει στη μέση ενός αιτήματος, ο χειριστής παρεμβαίνει, αντικαθιστά την έξοδο της κατάρρευσης με την ευγενική γενικόλογη πρόταση και — αν καταφέρει να καταλάβει ποιο πρόσθετο ή θέμα το προκάλεσε — προσπαθεί να στείλει email στον διαχειριστή με σύνδεσμο προς τη λειτουργία ανάκτησης.
Γι’ αυτό βλέπετε αυτό αντί για την παλιά λευκή οθόνη του θανάτου. Είναι βελτίωση, αλλά σημαίνει επίσης ότι οι διαγνωστικές πληροφορίες κρύβονται από προεπιλογή. Το μήνυμα εμφανίζεται σε δύο εκδοχές:
| Τι βλέπετε | Πού | Τι σας λέει |
|---|---|---|
| «Υπάρχει κάποιο κρίσιμο σφάλμα σε αυτή την ιστοσελίδα.» | Front end, αποσυνδεδεμένος | Συνέβη fatal error, καμία άλλη λεπτομέρεια δεν αποκαλύπτεται |
| Η ίδια γραμμή συν «Μάθετε περισσότερα για την αντιμετώπιση προβλημάτων στο WordPress» | Front end ή wp-admin | Ίδιο σφάλμα, το WordPress σάς προτείνει τη σελίδα του εγχειριδίου |
| «…Ελέγξτε τα εισερχόμενα του email διαχειριστή για οδηγίες.» | Front end | Ο χειριστής θεώρησε ότι έστειλε email ανάκτησης |
Η τρίτη εκδοχή είναι η χρήσιμη. Σημαίνει ότι το WordPress απέδωσε την κατάρρευση σε συγκεκριμένο πρόσθετο ή θέμα και προσπάθησε να σας δώσει τρόπο να μπείτε.
Βήμα 1: ελέγξτε το email της λειτουργίας ανάκτησης
Το WordPress στέλνει τον σύνδεσμο ανάκτησης στη διεύθυνση email διαχειριστή — αυτή που βρίσκεται στις Ρυθμίσεις → Γενικά — η οποία συχνά δεν είναι η διεύθυνση με την οποία συνδέεστε. Ελέγξτε εκείνα τα εισερχόμενα, και τα ανεπιθύμητα.
Το email περιέχει έναν μακρύ σύνδεσμο που τελειώνει σε κάτι σαν ?action=enter_recovery_mode. Ανοίγοντάς τον, συνδέεστε στο wp-admin σε λειτουργία ανάκτησης, όπου το προβληματικό πρόσθετο ή θέμα είναι σε παύση και επισημαίνεται με κόκκινη ειδοποίηση στην κορυφή. Από εκεί μπορείτε να το απενεργοποιήσετε κανονικά.
Δύο ειλικρινείς επιφυλάξεις. Πρώτον, το email παράγεται από την ίδια διεργασία PHP που μόλις κατέρρευσε, σε έναν διακομιστή που μπορεί να μην έχει καν λειτουργικό σύστημα αλληλογραφίας — η μη παράδοση είναι συνηθισμένη και η απουσία του email δεν σας λέει τίποτα για το σφάλμα. Δεύτερον, ο σύνδεσμος ανάκτησης λήγει (περίπου σε μία ημέρα από προεπιλογή), οπότε ένα παλιό email στα εισερχόμενα μπορεί απλώς να μη λειτουργεί πια· προκαλέστε νέα κατάρρευση φορτώνοντας ξανά τον ιστότοπο και περιμένετε καινούριο.
Αν θέλετε το email να φτάνει κάπου που πραγματικά διαβάζετε, ορίστε το ρητά στο wp-config.php:
define( 'RECOVERY_MODE_EMAIL', '[email protected]' );
Βήμα 2: διαβάστε το πραγματικό σφάλμα
Αυτό είναι το βήμα που μετατρέπει έναν χαλασμένο ιστότοπο σε διόρθωση πέντε λεπτών. Προσθέστε αυτές τις γραμμές στο wp-config.php, πάνω από τη γραμμή που λέει να σταματήσετε την επεξεργασία:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Το ότι η WP_DEBUG_DISPLAY είναι false έχει σημασία — κρατά το σφάλμα εκτός browser ενώ συνεχίζει να το γράφει στον δίσκο, ώστε να μην εκθέτετε διαδρομές στους επισκέπτες όσο ψάχνετε.
Φορτώστε ξανά τη χαλασμένη σελίδα μία φορά και μετά ανοίξτε το wp-content/debug.log. Η τελευταία εγγραφή θα μοιάζει κάπως έτσι:
PHP Fatal error: Uncaught Error: Call to undefined function some_plugin_helper()
in /home/user/public_html/wp-content/plugins/some-plugin/includes/render.php:214
Η διαδρομή του αρχείου είναι η απάντηση. Αν δείχνει μέσα στο wp-content/plugins/, αίτιο είναι εκείνο το πρόσθετο. Αν δείχνει μέσα στο wp-content/themes/, φταίει το θέμα — πολύ συχνά κάτι που επικολλήθηκε πρόσφατα στο functions.php.
Αν το debug.log δεν εμφανιστεί, ίσως ο φάκελος να μην είναι εγγράψιμος ή κάποιο πρόσθετο ασφαλείας να μετέφερε την καταγραφή αλλού. Καταφύγετε στο PHP error log του παρόχου σας — οι περισσότεροι πίνακες ελέγχου έχουν ενότητα «Error Log» ή «Logs», και το ίδιο fatal error θα βρίσκεται εκεί με χρονοσήμανση.
Επικολλήστε την εγγραφή στον αποκωδικοποιητή σφαλμάτων WordPress για να μεταφράσετε τη διατύπωση της PHP σε αυτό που σημαίνει στην πράξη και σε ποιο αρχείο να κοιτάξετε πρώτα.
Διαγράψτε αυτές τις γραμμές όταν τελειώσετε. Αφήνοντας την WP_DEBUG ενεργή σε παραγωγικό ιστότοπο γεμίζει ο δίσκος και, αν κάποια στιγμή η WP_DEBUG_DISPLAY ξαναγυρίσει σε true, τυπώνονται δημόσια οι διαδρομές του διακομιστή.
Βήμα 3: ξαναμπείτε στο wp-admin
Αν και το wp-admin είναι νεκρό και δεν ήρθε email ανάκτησης, απενεργοποιήστε όλα τα πρόσθετα σε επίπεδο συστήματος αρχείων. Συνδεθείτε μέσω SFTP (ή με τον διαχειριστή αρχείων του παρόχου) και μετονομάστε έναν φάκελο:
mv wp-content/plugins wp-content/plugins-off
Το WordPress δεν βρίσκει τα πρόσθετα, οπότε τα απενεργοποιεί όλα και η πρόσβαση στη διαχείριση σχεδόν πάντα επιστρέφει. Στη συνέχεια:
- Μετονομάστε τον φάκελο ξανά σε
plugins. Όλα παραμένουν απενεργοποιημένα — το WordPress τα κατέγραψε ως ανενεργά. - Ενεργοποιήστε τα πρόσθετα ένα ένα, φορτώνοντας το front end μετά από κάθε ένα.
- Αυτό που επαναφέρει το σφάλμα είναι ο υπαίτιος.
Αν ο ιστότοπος παραμένει χαλασμένος με όλα τα πρόσθετα κλειστά, ύποπτο είναι το θέμα. Μετονομάστε τον φάκελο του ενεργού θέματος μέσα στο wp-content/themes/ και το WordPress επιστρέφει σε ένα προεπιλεγμένο θέμα, εφόσον υπάρχει εγκατεστημένο.
Οι τρεις αιτίες που αξίζει να ξέρετε
Ενημέρωση προσθέτου ή θέματος που σκάει. Μακράν η πιο συχνή. Το log κατονομάζει το αρχείο απευθείας. Επαναφέρετε εκείνο το πρόσθετο στην προηγούμενη έκδοσή του, ή αφήστε το απενεργοποιημένο και επικοινωνήστε με τον προγραμματιστή στέλνοντας τη γραμμή του log.
Ασυμφωνία έκδοσης PHP. Οι πάροχοι αναβαθμίζουν την PHP βάσει προγράμματος, ενίοτε χωρίς ιδιαίτερη προειδοποίηση. Κώδικας γραμμένος για παλαιότερη PHP μπορεί να μη διαβάζεται καθόλου σε νεότερη. Το χαρακτηριστικό σημάδι είναι ότι δεν αλλάξατε τίποτα εσείς και χάλασαν όλα ταυτόχρονα. Η επαναφορά της PHP κατά μία δευτερεύουσα έκδοση από τον πίνακα φιλοξενίας είναι έγκυρο διαγνωστικό — αντιμετωπίστε την όμως ως αγορά χρόνου, όχι ως λύση. Οι παλιές εκδόσεις PHP σταματούν να λαμβάνουν ενημερώσεις ασφαλείας.
Εξάντληση μνήμης. Το log γράφει «Allowed memory size of X bytes exhausted». Η αύξηση του ορίου στο wp-config.php είναι λογική κίνηση:
define( 'WP_MEMORY_LIMIT', '256M' );
Να είστε ειλικρινείς για το τι κάνει αυτό: ανεβάζει την οροφή, δεν διορθώνει ό,τι κατανάλωσε 256MB για να αποδώσει μία σελίδα. Αν το όριο πρέπει να ανεβαίνει συνέχεια, το πραγματικό πρόβλημα είναι κάτι άλλο — συνήθως μια εισαγωγή δεδομένων, ένας page builder ή ένα κακογραμμένο ερώτημα.
Συμβουλές που μπορείτε άφοβα να αγνοήσετε
«Απλώς ανέβασε το όριο μνήμης.» Έχει νόημα μόνο αν το log λέει όντως ότι εξαντλήθηκε η μνήμη. Αλλιώς δεν αλλάζει τίποτα και απλώς κρύβει ότι δεν διαβάσατε ποτέ το σφάλμα.
«Ξαναεγκατέστησε τον πυρήνα του WordPress.» Τα αρχεία του πυρήνα σπάνια ευθύνονται, και η αντικατάστασή τους σπαταλά χρόνο που θα μπορούσατε να αφιερώσετε στην ανάγνωση μίας γραμμής του log.
«Απενεργοποίησε τον χειριστή fatal errors.» Υπάρχει σταθερά που τον απενεργοποιεί, και το αποτέλεσμα είναι να τυπώνεται το ωμό σφάλμα στον δημόσιο ιστότοπό σας αντί να το πιάνει κάποιος. Αυτό εκθέτει διαδρομές αρχείων στους επισκέπτες. Χρησιμοποιήστε καλύτερα την WP_DEBUG_LOG με την WP_DEBUG_DISPLAY κλειστή — ίδια πληροφορία, καμία έκθεση.
«Καθάρισε την cache.» Ένα fatal error συμβαίνει μέσα στην PHP, πριν προλάβει να σερβίρει οτιδήποτε ένα πρόσθετο cache. Αν σερβίρεται αποθηκευμένο αντίγραφο της σελίδας σφάλματος, ο καθαρισμός βοηθά αφού διορθώσετε την αιτία — ποτέ αντί γι’ αυτό.
Κολλήσατε ακόμα;
Αν το log δείχνει προς αρχείο του πυρήνα και όχι προς κάτι μέσα στο wp-content, η πιθανότερη εξήγηση είναι ότι κάποιο πρόσθετο φορτώθηκε νωρίτερα και χάλασε την κατάσταση στην οποία βασίζεται ο πυρήνας, όχι ότι ο πυρήνας έχει αλλοιωθεί. Κλείστε τα πάντα με τη μετονομασία του φακέλου, επιβεβαιώστε ότι ο ιστότοπος φορτώνει καθαρά, και μετά επαναφέρετε τα πρόσθετα ένα ένα — το τελευταίο που ενεργοποιείτε πριν επιστρέψει το σφάλμα είναι αυτό που πρέπει να αναφέρετε, με τη γραμμή του log συνημμένη.
FAQ
Ερωτήσεις
Τι σημαίνει «υπάρχει κάποιο κρίσιμο σφάλμα σε αυτή την ιστοσελίδα»;
Σημαίνει ότι η PHP συνάντησε fatal error ενώ έχτιζε τη σελίδα και το WordPress το έπιασε πριν εμφανιστεί η λευκή οθόνη. Το μήνυμα είναι σκόπιμα αόριστο ώστε οι επισκέπτες να μη βλέπουν διαδρομές αρχείων ή κώδικα. Το πραγματικό σφάλμα, με αρχείο και αριθμό γραμμής, γράφεται σε ένα αρχείο καταγραφής στον διακομιστή.
Πού βρίσκεται το log του κρίσιμου σφάλματος στο WordPress;
Αν ορίσετε τις WP_DEBUG και WP_DEBUG_LOG σε true μέσα στο wp-config.php, το WordPress γράφει στο wp-content/debug.log. Αν είναι απενεργοποιημένες, το σφάλμα πηγαίνει ούτως ή άλλως στο PHP error log του παρόχου σας, συνήθως προσβάσιμο από τον πίνακα ελέγχου της φιλοξενίας στην ενότητα με τα logs ή τα σφάλματα. Ελέγξτε και τα δύο πριν υποθέσετε ότι δεν καταγράφηκε τίποτα.
Γιατί δεν έλαβα το email της λειτουργίας ανάκτησης του WordPress;
Το email πηγαίνει στη διεύθυνση διαχειριστή που είναι καταχωρημένη στις Ρυθμίσεις, όχι στη διεύθυνση με την οποία συνδέεστε, και στέλνεται από την ίδια χαλασμένη PHP που μόλις κατέρρευσε, οπότε η παράδοση αποτυγχάνει συχνά. Οι πάροχοι κοινόχρηστης φιλοξενίας μπλοκάρουν επίσης την εξερχόμενη αλληλογραφία χωρίς SMTP. Δείτε τα ανεπιθύμητα και μετά αγνοήστε το email και απενεργοποιήστε τα πρόσθετα μέσω SFTP.
Πώς διορθώνω ένα κρίσιμο σφάλμα αν δεν μπορώ να συνδεθώ στο wp-admin;
Συνδεθείτε μέσω SFTP ή με τον διαχειριστή αρχείων του παρόχου σας και μετονομάστε τον φάκελο wp-content/plugins σε plugins-off. Έτσι απενεργοποιούνται όλα τα πρόσθετα μαζί και σχεδόν πάντα επανέρχεται η πρόσβαση στη διαχείριση. Μετονομάστε τον ξανά και ενεργοποιήστε τα πρόσθετα ένα ένα μέχρι να επιστρέψει το σφάλμα, οπότε βρήκατε τον υπαίτιο.
Μπορεί μια αναβάθμιση της έκδοσης PHP να προκαλέσει κρίσιμο σφάλμα στο WordPress;
Ναι, και είναι από τις πιο συχνές αιτίες. Οι πάροχοι αναβαθμίζουν την PHP αυτόματα, και παλιός κώδικας προσθέτου ή θέματος που χρησιμοποιεί καταργημένη σύνταξη θα σκάσει αμέσως. Η εγγραφή στο log συνήθως κατονομάζει συγκεκριμένο αρχείο μέσα στο wp-content. Η επαναφορά της PHP σε προηγούμενη έκδοση από τον πίνακα φιλοξενίας επιβεβαιώνει τη διάγνωση, αν και είναι προσωρινή λύση.
Σημαίνει το μήνυμα κρίσιμου σφάλματος ότι ο ιστότοπός μου δέχθηκε επίθεση;
Συνήθως όχι. Η συντριπτική πλειονότητα αυτών των περιπτώσεων είναι μια ενημέρωση προσθέτου ή θέματος ασύμβατη με την έκδοση PHP σας, ή εξάντληση μνήμης. Και το κακόβουλο λογισμικό μπορεί να προκαλέσει fatal errors, αλλά τότε η εγγραφή στο log δείχνει προς άγνωστο αρχείο ή προς σκόπιμα δυσανάγνωστο κώδικα. Διαβάστε το log πριν υποθέσετε παραβίαση.