Αύξηση του χρόνου εκτέλεσης του σεναρίου. Αυξήθηκε ο χρόνος εκτέλεσης ενός σεναρίου PHP με το Nginx. Γιατί μετρήσεις στον προγραμματισμό;

Εάν έχετε ένα μεγάλο έργο ή έναν διακομιστή με περιορισμένους πόρους, τότε θα βλέπετε συχνά το σφάλμα "504 Gateway Time-out".

Μπορείτε να ακολουθήσετε τα παρακάτω βήματα για να αυξήσετε την τιμή χρονικού ορίου. Στην PHP η προεπιλογή είναι 30 δευτερόλεπτα.

Αλλαγές στο php.ini

Εάν θέλετε να αλλάξετε τον μέγιστο χρόνο εκτέλεσης για σενάρια PHP από 30 δευτερόλεπτα (προεπιλογή) σε 300 δευτερόλεπτα.

Nano /etc/php5/fpm/php.ini

Εγκαθιστώ...

Max_execution_time = 300

Στο Apache PHP που εκτελείται ως λειτουργική μονάδα, αυτές οι αλλαγές θα είναι αρκετές. Αλλά στην περίπτωσή μας, πρέπει να κάνουμε αλλαγές σε πολλά ακόμη σημεία.

Αλλαγές στο PHP-FPM

Αυτό είναι απαραίτητο εάν καταργήσετε τον σχολιασμό της παραμέτρου request_terminate_timeout νωρίτερα. Από προεπιλογή σχολιάζεται και παίρνει την τιμή max_execution_time που βρέθηκε από το php.ini

Ανοιγμα...

Nano /etc/php5/fpm/pool.d/www.conf

Εγκατάσταση...

Request_terminate_timeout = 300

Αλλαγές στο Nginx Config

Αύξηση του χρονικού ορίου για έναν τομέα example.com

Τοποθεσία Nano /etc/nginx/sites-available/example.com ~ \.php$ ( περιλαμβάνει /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 300; }

Εάν θέλετε να αυξήσετε το χρονικό όριο για όλους τους τομείς στον διακομιστή σας, μπορείτε να επεξεργαστείτε το κύριο αρχείο διαμόρφωσης nginx.conf:

Nano /etc/nginx/nginx.conf

Προσθέστε την ακόλουθη παράμετρο στην ενότητα http(..).

Http(#... fastcgi_read_timeout 300; #... }

Έχετε λάβει ποτέ κάποιο σφάλμα Μοιραίο σφάλμα: Υπέρβαση του μέγιστου χρόνου εκτέλεσης των 30 δευτερολέπτωνστο WordPress; Αυτό το σφάλμα σημαίνει ότι το σενάριο PHP που εκτελείται απαιτούσε περισσότερο χρόνο για να ολοκληρωθεί από το όριο που είχε οριστεί και το σενάριο διακόπηκε λόγω αυτού. Αυτός ο οδηγός θα σας βοηθήσει να κατανοήσετε το ερώτημα πώς να αυξήσετε τον χρόνο εκτέλεσης σεναρίου στην PHP και έτσι να λύσετε το σφάλμα που έχει προκύψει.

Πριν ξεκινήσετε αυτόν τον οδηγό, ελέγξτε ότι έχετε:

  • Πρόσβαση στην Κονσόλα διαχείρισης του ιστότοπού σας WordPress (Αγγλικά)

Βήμα 1 – Εγκαταστήστε το πρόσθετο WP Maximum Execution Time Exceeded

Το WordPress έχει μια τεράστια κοινότητα, επομένως υπάρχει ένα εύχρηστο πρόσθετο ή πολλά για κάθε λειτουργικότητα που χρειάζεστε. Η κατάστασή μας δεν αποτελεί εξαίρεση· για να αυξήσετε τον χρόνο εκτέλεσης του σεναρίου στην PHP, μπορείτε να χρησιμοποιήσετε την προσθήκη WP Maximum Execution Time Exceeded και να διορθώσετε το σφάλμα που έχει προκύψει. Μπορείτε να βρείτε αναλυτικές οδηγίες σχετικά με τον τρόπο εγκατάστασης της προσθήκης WordPress.

Αυτό το πρόσθετο κάνει αλλαγές στο αρχείο .htaccess και αυξάνει τα χρονικά όρια εκτέλεσης του σεναρίου. Μετά την εγκατάσταση του πρόσθετου, δεν χρειάζεται να κάνετε κάτι άλλο, όλα έχουν ήδη γίνει από το πρόσθετο. Το πρόσθετο δεν έχει σελίδα ρυθμίσεων, οπότε αν θέλετε να επιστρέψετε τις προηγούμενες ρυθμίσεις, απλώς διαγράψτε το πρόσθετο και το .htaccess θα επιστρέψει στην αρχική του μορφή.

Βήμα 2 – Μη αυτόματη επεξεργασία του αρχείου .htaccess

Εάν έχετε ήδη εγκαταστήσει πολλά πρόσθετα και δεν θέλετε να χρησιμοποιήσετε ένα επιπλέον ή απλώς δεν σας βοήθησε να απαλλαγείτε από το σφάλμα, τότε μπορείτε να κάνετε αλλαγές στο αρχείο .htaccess με μη αυτόματο τρόπο για να αυξήσετε τη μέγιστη εκτέλεση προθεσμία. Ο ευκολότερος τρόπος χρήσης Διαχείριση αρχείωνπου βρίσκεται στον Πίνακα Ελέγχου σας. Εάν δεν ξέρετε πώς να βρείτε το αρχείο .htaccess, ανατρέξτε στις λεπτομερείς οδηγίες. Θα χρειαστεί να εισαγάγετε τον παρακάτω κώδικα στο αρχείο .htaccess στο κάτω μέρος και να τον αποθηκεύσετε κάνοντας κλικ Αποθηκεύσετε:

Php_value max_execution_time 60

Αυτό θα αυξήσει την τιμή της παραμέτρου max_execution_time και, για την PHP, τον χρόνο εκτέλεσης του σεναρίου σε 60 δευτερόλεπτα (1 λεπτό). Εάν εξακολουθείτε να εμφανίζεται αυτό το σφάλμα, δοκιμάστε να το αυξήσετε ακόμη περισσότερο - έως και 120/180 δευτερόλεπτα και ούτω καθεξής.

Βήμα 3 – Αλλαγή της τιμής max_execution_time στο cPanel

Εάν χρησιμοποιείτε cPanel, τότε μπορείτε να αυξήσετε την παράμετρο max_execution_time απευθείας μέσω του cPanel. Μεταβείτε στην ενότητα Επιλέξτε Έκδοση PHP (Επιλέξτε έκδοση PHP).

Αυξήστε την τιμή που βλέπετε στη γραμμή max_execution_time. Συνήθως, έχει οριστεί στα 30 δευτερόλεπτα από προεπιλογή, στο παράδειγμά μας το αυξήσαμε στα 60 δευτερόλεπτα. Κάντε κλικ Ισχύουν(Εφαρμογή) για να αποθηκεύσετε τις αλλαγές.

Αυτό είναι όλο, αυξήσατε με επιτυχία την τιμή της οριακής παραμέτρου max_execution_timeγια τον ιστότοπό σας.

συμπέρασμα

Ακολουθώντας αυτόν τον οδηγό, έχετε μάθει 3 τρόπους για να αυξήσετε max_execution_timeγια WordPress, για να αλλάξετε τον χρόνο εκτέλεσης του σεναρίου στην PHP και να απαλλαγείτε από το σφάλμα Μοιραίο σφάλμα: Υπέρβαση του μέγιστου χρόνου εκτέλεσης. Εάν χρησιμοποιείτε κοινόχρηστη φιλοξενία και καμία από τις λύσεις δεν λειτουργεί για εσάς, επικοινωνήστε με τον πάροχο φιλοξενίας για να ελέγξετε ποιοι είναι οι πραγματικοί περιορισμοί σας και αν μπορούν να αλλάξουν καθόλου.

Εάν αναπτύσσετε ένα μεγάλο έργο, τότε μπορεί να χρειαστεί πολύς χρόνος για την επεξεργασία ορισμένων δεδομένων. Διαφορετικοί ιστότοποι φιλοξενίας έχουν τα δικά τους όρια σε τέτοιες ενέργειες και αν η ανάγκη αύξησης αυτού του χρόνου σας έφερε εδώ, τότε θα σας πω αναλυτικά πώς μπορεί να γίνει αυτό.

Για να καταλάβετε για τι πράγμα μιλάμε, θα δώσω ένα μικρό παράδειγμα. Εάν υπερβείτε το καθορισμένο χρονικό πλαίσιο, ενδέχεται να λάβετε το ακόλουθο σφάλμα:

Θανατηφόρο σφάλμα: Υπέρβαση μέγιστου χρόνου εκτέλεσης 30 δευτερολέπτων στο site.php στη γραμμή 19

Θα σας πω για 4 τρόπους για να απαλλαγείτε από αυτό.

Αλλά αξίζει να ξεκινήσετε με το γεγονός ότι σε κάθε μεμονωμένη περίπτωση, όλες οι μέθοδοι που αναφέρονται ενδέχεται να μην λειτουργούν, καθώς ορισμένοι πάροχοι φιλοξενίας απαγορεύουν την αλλαγή αυτής της παραμέτρου οι ίδιοι.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω του αρχείου διαμόρφωσης php.ini

Ως πρώτος τρόπος αύξησης του χρόνου εκτέλεσης του σεναρίου, θα χρησιμοποιήσουμε το αρχείο διαμόρφωσης php.ini.

Για να μάθετε πού ακριβώς βρίσκεται αυτό το αρχείο, διαβάστε.

Ανοίξτε το με τρόπο βολικό για εσάς και εισάγετε στο κάτω μέρος:

Max_execution_time = 300;

Οπου " 300 "σημαίνει 300 δευτερόλεπτα (αλλαγή στο δικό σου). Αυτό το αρχείο, δυστυχώς, δεν είναι διαθέσιμο για επεξεργασία από χρήστες σε όλους τους ιστότοπους φιλοξενίας.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω της ενσωματωμένης συνάρτησης "ini_set"

Η δεύτερη μέθοδος βασίζεται στη χρήση της συνάρτησης " ini_set" Το εισάγετε απευθείας στο ίδιο το αρχείο σεναρίου, κατά προτίμηση στην κορυφή. Παράδειγμα:

Εδώ το νόημα είναι " 300 «Επίσης αλλάζεις σε αυτό που χρειάζεσαι μέσα σε δευτερόλεπτα. Σημείωσηότι όταν χρησιμοποιείτε την PHP σε ασφαλή λειτουργία, αυτή η λειτουργία δεν θα είναι διαθέσιμη.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω της ενσωματωμένης συνάρτησης "set_time_limit"

Η τρίτη μέθοδος, πιθανώς μια από τις πιο δημοφιλείς, είναι να χρησιμοποιήσετε το " set_time_limit» για να αλλάξετε το χρόνο εκτέλεσης του σεναρίου. Χρησιμοποιείται επίσης απευθείας στο ίδιο το αρχείο PHP. Παράδειγμα:

Εδώ " 300 «αλλάζετε επίσης στην τιμή που χρειάζεστε. Συνιστάται να εισαγάγετε τον κωδικό στην κορυφή.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω του αρχείου .htaccess

Η τελευταία επιλογή είναι να επεξεργαστείτε το αρχείο .htaccess, που βρίσκεται στη ρίζα του ιστότοπού σας (αν δεν υπάρχει, δημιουργήστε τον).

Επικόλληση στην κορυφή αυτού του αρχείου:

Php_value max_execution_time 300

Σημασία" 300 «Το αλλάζεις κι εσύ στο δικό σου.

Σημείωση, ότι σε όλες τις περιπτώσεις ο χρόνος εκτέλεσης του σεναρίου υποδεικνύεται σε δευτερόλεπτα. Επιπλέον, η τιμή της παραμέτρου σε όλες τις μεθόδους μπορεί να πάρει " 0 », που σημαίνει απεριόριστο χρόνο εκτέλεσης.

Πώς μπορώ να μάθω πόσος χρόνος διατίθεται για την εκτέλεση ενός σεναρίου PHP;

Αφού προσπαθήσετε να αλλάξετε τον χρόνο εκτέλεσης του σεναρίου χρησιμοποιώντας μία από τις μεθόδους, πρέπει να μάθετε εάν πέτυχες πραγματικά.

Για να το κάνετε αυτό, δημιουργήστε ένα αρχείο PHP στη ρίζα του ιστότοπού σας, όπου θα εξάγετε την τιμή του καθορισμένου χρόνου:

Εάν ο χρόνος είναι ίσος με αυτόν που υποδείξατε, συγχαρητήρια, έχετε πετύχει τον επιθυμητό στόχο. Διαφορετικά, διαβάστε ξανά το άρθρο, γράψτε στα σχόλια για το πρόβλημά σας ή προωθήστε το στον πάροχο φιλοξενίας σας.

Εάν αναπτύσσετε ένα μεγάλο έργο, τότε μπορεί να χρειαστεί πολύς χρόνος για την επεξεργασία ορισμένων δεδομένων. Διαφορετικοί ιστότοποι φιλοξενίας έχουν τα δικά τους όρια σε τέτοιες ενέργειες και αν η ανάγκη αύξησης αυτού του χρόνου σας έφερε εδώ, τότε θα σας πω αναλυτικά πώς μπορεί να γίνει αυτό.

Για να καταλάβετε για τι πράγμα μιλάμε, θα δώσω ένα μικρό παράδειγμα. Εάν υπερβείτε το καθορισμένο χρονικό πλαίσιο, ενδέχεται να λάβετε το ακόλουθο σφάλμα:

Μοιραίο σφάλμα: Υπέρβαση μέγιστου χρόνου εκτέλεσης 30 δευτερολέπτων στο pandoge_com.php στη γραμμή 19

Θα σας πω για 4 τρόπους για να απαλλαγείτε από αυτό.

Αλλά αξίζει να ξεκινήσετε με το γεγονός ότι σε κάθε μεμονωμένη περίπτωση, όλες οι μέθοδοι που αναφέρονται ενδέχεται να μην λειτουργούν, καθώς ορισμένοι πάροχοι φιλοξενίας απαγορεύουν την αλλαγή αυτής της παραμέτρου οι ίδιοι.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω του αρχείου διαμόρφωσης php.ini

Ως πρώτος τρόπος αύξησης του χρόνου εκτέλεσης του σεναρίου, θα χρησιμοποιήσουμε το αρχείο διαμόρφωσης php.ini.

Για να μάθετε πού ακριβώς βρίσκεται αυτό το αρχείο, διαβάστε.

Ανοίξτε το με τρόπο βολικό για εσάς και εισάγετε στο κάτω μέρος:

Max_execution_time = 300;

Οπου " 300 "σημαίνει 300 δευτερόλεπτα (αλλαγή στο δικό σου). Αυτό το αρχείο, δυστυχώς, δεν είναι διαθέσιμο για επεξεργασία από χρήστες σε όλους τους ιστότοπους φιλοξενίας.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω της ενσωματωμένης συνάρτησης "ini_set"

Η δεύτερη μέθοδος βασίζεται στη χρήση της συνάρτησης " ini_set" Το εισάγετε απευθείας στο ίδιο το αρχείο σεναρίου, κατά προτίμηση στην κορυφή. Παράδειγμα:

Εδώ το νόημα είναι " 300 «Επίσης αλλάζεις σε αυτό που χρειάζεσαι μέσα σε δευτερόλεπτα. Σημείωσηότι όταν χρησιμοποιείτε την PHP σε ασφαλή λειτουργία, αυτή η λειτουργία δεν θα είναι διαθέσιμη.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω της ενσωματωμένης συνάρτησης "set_time_limit"

Η τρίτη μέθοδος, πιθανώς μια από τις πιο δημοφιλείς, είναι να χρησιμοποιήσετε το " set_time_limit» για να αλλάξετε το χρόνο εκτέλεσης του σεναρίου. Χρησιμοποιείται επίσης απευθείας στο ίδιο το αρχείο PHP. Παράδειγμα:

Εδώ " 300 «αλλάζετε επίσης στην τιμή που χρειάζεστε. Συνιστάται να εισαγάγετε τον κωδικό στην κορυφή.

Αύξηση του χρόνου εκτέλεσης ενός σεναρίου PHP μέσω του αρχείου .htaccess

Η τελευταία επιλογή είναι να επεξεργαστείτε το αρχείο .htaccess, που βρίσκεται στη ρίζα του ιστότοπού σας (αν δεν υπάρχει, δημιουργήστε τον).

Επικόλληση στην κορυφή αυτού του αρχείου:

Php_value max_execution_time 300

Σημασία" 300 «Το αλλάζεις κι εσύ στο δικό σου.

Σημείωση, ότι σε όλες τις περιπτώσεις ο χρόνος εκτέλεσης του σεναρίου υποδεικνύεται σε δευτερόλεπτα. Επιπλέον, η τιμή της παραμέτρου σε όλες τις μεθόδους μπορεί να πάρει " 0 », που σημαίνει απεριόριστο χρόνο εκτέλεσης.

Πώς μπορώ να μάθω πόσος χρόνος διατίθεται για την εκτέλεση ενός σεναρίου PHP;

Αφού προσπαθήσετε να αλλάξετε τον χρόνο εκτέλεσης του σεναρίου χρησιμοποιώντας μία από τις μεθόδους, πρέπει να μάθετε εάν πέτυχες πραγματικά.

Για να το κάνετε αυτό, δημιουργήστε ένα αρχείο PHP στη ρίζα του ιστότοπού σας, όπου θα εξάγετε την τιμή του καθορισμένου χρόνου:

Εάν ο χρόνος είναι ίσος με αυτόν που υποδείξατε, συγχαρητήρια, έχετε πετύχει τον επιθυμητό στόχο. Διαφορετικά, διαβάστε ξανά το άρθρο, γράψτε στα σχόλια για το πρόβλημά σας ή προωθήστε το στον πάροχο φιλοξενίας σας.

Από τον συγγραφέα:ο γιος του φίλου μου άρχισε να ενδιαφέρεται τόσο πολύ για τη χημεία που άρχισε να κάνει διάφορες «δοκιμές» στο σπίτι. Αφού ο πολυέλαιος στην κουζίνα έγινε «θύμα» τους, ο πατέρας του του ζήτησε να αλλάξει τις προτιμήσεις του. Ως αποτέλεσμα, το παιδί άρχισε να ενδιαφέρεται για τα στατιστικά στοιχεία και αποφάσισε να υπολογίσει τον μέσο χρόνο καύσης ενός αγώνα. Το αποτέλεσμα ήταν να πάρει φωτιά ολόκληρο το διαμέρισμα. Συμβούλεψα τον επίδοξο επιστήμονα να ξεκινήσει τον προγραμματισμό και να ορίσει τον χρόνο εκτέλεσης του σεναρίου PHP.

Γιατί μετρήσεις στον προγραμματισμό;

Πρώτα απ 'όλα, είναι πιο ασφαλές από τη χημεία και τη στατιστική. Αλλά στην πραγματικότητα, ο χρόνος εκτέλεσης του κώδικα προγράμματος είναι μια σημαντική παράμετρος που επηρεάζει την απόδοση ολόκληρου του πόρου και των μεμονωμένων λειτουργιών του. Αυτή η παράμετρος έχει μεγαλύτερη ζήτηση κατά τη βελτιστοποίηση και τη δοκιμή.

Ας φανταστούμε λίγο. Ας φανταστούμε ότι υπάρχει κάποιο είδος «εγγραφής» μηχανής, το οποίο ο προγραμματιστής «ανέβασε» σε μια καλή φιλοξενία και ξεκίνησε (βάσει αυτού) τον ιστότοπό του. Αλλά για κάποιο λόγο, η φόρτωση του πόρου από την πλευρά του χρήστη είναι πολύ αργή.

Σε μια τέτοια κατάσταση, αρχικά όλα τα χτυπήματα θα πέσουν στον οικοδεσπότη. Πιθανότατα, ένας θυμωμένος προγραμματιστής θα υποβάλει καταγγελία στην υπηρεσία υποστήριξης φιλοξενίας. Λένε ότι οι όροι της σύμβασης δεν εκπληρώνονται, ο ιστότοπος μόλις «ζωντανεύει»...

Αλλά στην πραγματικότητα, το πρόβλημα της αργής φόρτωσης σελίδων ενός δυναμικού πόρου μπορεί να κρύβεται στον ίδιο τον κινητήρα. Και για να μην μοιάζετε αργότερα με «ανδρείκελο», ένας έμπειρος προγραμματιστής μετρά πάντα τον χρόνο εκτέλεσης ενός σεναρίου PHP πριν παραδώσει ένα έργο.

Χαρακτηριστικά PHP

Πάντα την αποκαλούσα μια από τις πιο βολικές γλώσσες προγραμματισμού. Για την παρακολούθηση του χρόνου εκτέλεσης του κώδικα, ο προγραμματιστής δεν χρειάζεται να γράψει μεγάλα «ταλμούδια» για να υποκλέψει κάθε γραμμή του σεναρίου. Αυτή η τεχνολογία εφαρμόζει αρκετά εξειδικευμένα εργαλεία. Η κύρια είναι η συνάρτηση microtime(). Επιστρέφει τον χρόνο (σε χιλιοστά του δευτερολέπτου) που έχει περάσει από τις αρχές του 1970. Η λεγόμενη «αρχή της εποχής του Unix». Εάν περάσετε την παράμετρο get_as_float στη συνάρτηση με την τιμή true, τότε θα επιστρέψει τη χρονική περίοδο με τη μορφή ολόκληρων δευτερολέπτων και κλασματικών χιλιοστών του δευτερολέπτου.

Η αρχή της χρήσης της microtime() είναι η εξής: η συνάρτηση καλείται στην αρχή του σεναρίου και στο τέλος του. Στη συνέχεια, η αρχική τιμή αφαιρείται από την τελευταία τιμή. Δείτε πώς μπορείτε να υπολογίσετε τον χρόνο εκτέλεσης ενός σεναρίου:

"; $last=microtime(true); $value=$last-$first; echo "Το σενάριο εκτελείται σε: ".$value; ?>

Αλλαγή του χρόνου εκτέλεσης του κωδικού

Στην PHP, η τιμή του χρόνου εκτέλεσης του σεναρίου μπορεί να περιοριστεί προγραμματικά (μείωση ή αύξηση). Για να γίνει αυτό, χρησιμοποιούνται διάφορες συναρτήσεις, καθεμία από τις οποίες αντικαθιστά ένα σύνολο παραμέτρων στο αρχείο διαμόρφωσης (php.ini).
Αρχικά, ας τροποποιήσουμε τον κώδικά μας και ας αυξήσουμε τον αριθμό των επαναλήψεων βρόχου κατά 20 φορές σε 200 εκατομμύρια. Εάν όλα είναι καλά, τότε μετά την εκτέλεση του σεναρίου θα λάβετε ένα μοιραίο μήνυμα σφάλματος.

Αυτό σημαίνει ότι στις ρυθμίσεις η παράμετρος max_execution_time ορίζεται στην προεπιλεγμένη τιμή (30 δευτερόλεπτα). Ας αυξήσουμε τον μέγιστο χρόνο εκτέλεσης ενός σεναρίου στην PHP κατά 3 φορές.

set_time_limit(90);

Τώρα δεν λαμβάνουμε κανένα μήνυμα σφάλματος.