Mengekalkan Pelaksanaan PHP Alive Post-HTTP Response
Dalam persekitaran di mana PHP berjalan sebagai mod_php Apache, cabaran biasa timbul dalam mengekalkan pelaksanaan PHP selepas menghantar respons HTTP kepada klien. Kekangan ini berpunca daripada keperluan untuk melaporkan mesej ralat kepada aplikasi dalam tempoh tamat masa tertentu.
Untuk menangani isu ini, kuncinya terletak pada menghantar respons HTTP seawal mungkin tanpa mengganggu operasi yang sedang berjalan. Satu kaedah yang berkesan melibatkan penggunaan coretan kod berikut:
ob_end_clean(); header("Connection: close"); ignore_user_abort(); // optional ob_start(); echo ('Text the user will see'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); session_write_close(); // Added per suggestion // Do processing here sleep(30); echo('Text user will never see');
Coretan ini pada mulanya membuang sebarang output yang belum selesai dan mengkonfigurasi sambungan HTTP untuk ditutup. Dengan mengabaikan percubaan pengguguran yang dimulakan pengguna dan menentukan panjang kandungan, respons HTTP dihantar dengan berkesan. Selepas itu, pemprosesan berterusan boleh dilaksanakan, seperti operasi pangkalan data atau penghantaran e-mel.
Dengan menggunakan kaedah ini, PHP boleh menghantar respons HTTP lengkap kepada klien dan meneruskan pelaksanaan untuk tempoh masa tertentu, menyelesaikan isu dengan berkesan had pelaporan ralat yang dikenakan oleh aplikasi luaran. Pendekatan ini amat berguna dalam senario di mana operasi yang memakan masa mesti dilakukan tanpa melebihi tamat masa yang telah ditetapkan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memastikan pelaksanaan PHP tetap hidup selepas menghantar respons HTTP kepada klien?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!