Penyelesaian kepada masalah bahawa masa pelaksanaan kaedah PHP terlalu lama: 1. Tetapkan tamat masa permintaan get laluan Nginx 2. Tetapkan had atas masa pelaksanaan skrip PHP.
Persekitaran pengendalian artikel ini: sistem Windows 7, PHP versi 7.1, komputer DELL G3
Cara menyelesaikan masalah terlalu lama masa pelaksanaan kaedah php?
Selesaikan masalah bahawa masa pelaksanaan kaedah PHP terlalu lama mengakibatkan 502 Bad Gateway
Latar Belakang
Baru-baru ini mengalami masalah, ada sekeping kod PHP yang perlu melibatkan operasi masa IO yang panjang, dan tempoh ini akan menyekat urutan tempat permintaan itu terletak, menyebabkan permintaan itu tamat masa.
Anda mungkin berkata, apakah yang sukar tentang ini? Buka sahaja urutan untuk melakukannya secara tidak segerak, dan kemudian tidak mengapa untuk mengemas kini status. Ini benar-benar penyelesaian yang baik, tetapi sayang sekali bahawa keseluruhan set kod ini adalah milik orang lain. Jika anda ingin mengubah suai kod, perniagaan akan terjejas, jadi penyelesaian saya adalah untuk menyelesaikan masalah ini dengan mengkonfigurasi tamat masa tanpa mengubah kod sebanyak mungkin.
Penyelesaian
Dari masalah di atas, tamat masa dipengaruhi terutamanya oleh dua faktor:
Tetapan tamat masa permintaan gerbang Nginx
Tetapan had masa pelaksanaan skrip PHP
Kami menetapkannya mengikut turutan.
Tetapan tamat masa permintaan gerbang Nginx
Nginx menyokong tetapan tamat masa yang sangat halus. Yang utama yang digunakan adalah seperti berikut:
keepalive_timeout
Nginx menggunakan keepalive_timeout untuk menentukan tamat masa KeepAlive. Menentukan tempoh masa maksimum setiap sambungan TCP boleh dikekalkan. Nilai lalai Nginx ialah 75 saat Sesetengah penyemak imbas hanya mengekalkan maksimum 60 saat, jadi ia boleh ditetapkan kepada 60 saat.
fastcgi_connect_timeout
Tamat masa untuk mewujudkan sambungan ke pelayan FastCGI.
fastcgi_send_timeout
Tetapkan tamat masa untuk menghantar permintaan ke pelayan FastCGI. Tetapkan tamat masa hanya antara dua operasi tulis berturut-turut, bukan untuk keseluruhan pemindahan yang diminta. Jika pelayan FastCGI tidak menerima apa-apa dalam masa ini, sambungan ditutup.
fastcgi_read_timeout
Tamat masa untuk membaca respons daripada pelayan FastCGI. Tetapkan tamat masa hanya antara dua operasi baca berturut-turut, bukan untuk pemindahan keseluruhan respons. Jika pelayan FastCGI tidak menghantar apa-apa dalam masa ini, sambungan ditutup.
Memandangkan permintaan untuk melaksanakan skrip PHP adalah lebih berkaitan dengan tiga tetapan terakhir. Jadi hanya tambah tetapan dalam fail konfigurasi Nginx tapak web yang sepadan.
fastcgi_connect_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s;
Tetapan had atas masa pelaksanaan skrip PHP
Masa pelaksanaan skrip PHP dipengaruhi terutamanya oleh dua konfigurasi:
php.ini 中 max_execution_time 和 max_input_time
Lokasi lalai php.ini ialah /usr/local/php/etc/
Ubah suai dua item konfigurasi ini dalam fail konfigurasi php.ini kepada had atas tempoh tamat masa.
max_execution_time = 600 max_input_time = 600 php-fpm.conf 中 request_terminate_timeout php-fpm.conf 的默认位置在 /usr/local/php/etc/ request_terminate_timeout 也设置为超时时间的上限。 request_terminate_timeout = 600
Selepas pengubahsuaian selesai, mulakan semula Nginx dan php-fpm.
service nginx reload /etc/init.d/php-fpm reload
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah masa pelaksanaan terlalu lama kaedah php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!