Pertanyaan ini menangani cabaran menutup sambungan sebelum melengkapkan skrip PHP. Matlamatnya adalah untuk memulakan proses yang panjang melalui AJAX tetapi mengembalikan respons yang menunjukkan permulaannya tanpa menunggu skrip PHP selesai.
Menurut manual PHP, menamatkan sambungan TCP tanpa menamatkan skrip PHP melibatkan lebih daripada hanya menghantar tajuk "tutup". Nota pengguna #71172 (November 2006) menyediakan penyelesaian yang komprehensif:
<?php ob_end_clean(); header("Connection: close"); ignore_user_abort(true); ob_start(); echo('Text the user will see'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); // Do processing here sleep(30); echo('Text user will never see'); ?>
Untuk penyelesaian itu berfungsi, adalah penting untuk melumpuhkan penimbalan output, membersihkan penimbal dan kemudian menghantar maklumat pengepala. Walaupun menghantar pengepala "tutup" adalah perlu, ia tidak mencukupi untuk menutup sambungan serta-merta.
Nota pengguna berikutnya #89177 (Februari 2009) dan #93441 (September 2009) memberikan cerapan tambahan tentang pengendalian sambungan dan membantu menjelaskan nuansa penutupan sambungan awal dalam PHP.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menutup Sambungan PHP Awal Selepas Memulakan Proses Berlangsung Lama melalui AJAX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!