Dalam pelbagai aplikasi PHP, keperluan timbul untuk melaksanakan skrip shell secara tidak segerak, tanpa menghalang prestasi permintaan utama. Tugas di tangan melibatkan penggunaan skrip shell yang melaksanakan panggilan SOAP, yang boleh memakan masa. Walau bagaimanapun, skrip PHP tidak seharusnya menunggu proses shell selesai.
Usaha Penerokaan
Pada mulanya, fungsi seperti exec() dan shell_exec() telah dipertimbangkan. Walau bagaimanapun, tiada satu pun daripada mereka memberikan kelakuan tidak menyekat yang diingini.
Invokasi Tak Segerak menggunakan Latar Belakang
Penyelesaian kepada teka-teki ini terletak pada latar belakang skrip shell menggunakan '& ' pengendali. Dengan menambahkan '&' pada perintah exec, skrip shell dilaksanakan sebagai proses latar belakang, membenarkan permintaan PHP meneruskan pelaksanaannya tanpa halangan.
exec("sh script.sh &");
Mengubah Hala Keluar dan Aliran Ralat
Dalam senario tertentu, adalah wajar untuk menyekat kedua-dua output standard dan aliran ralat daripada skrip shell. Ini boleh dicapai dengan mengubah halanya ke /dev/null menggunakan sintaks berikut:
exec("sh script.sh & > /dev/null 2> /dev/null");
Alternatif kepada Redirection
Sebagai alternatif, output dan aliran ralat boleh diubah hala dalam satu operasi menggunakan '>' operator diikuti oleh dua ampersand (&).
exec("sh script.sh & >& /dev/null");
Pendekatan ini menawarkan penyelesaian yang ringkas dan boleh dibaca untuk menstrim pengalihan.
Nota Tambahan
Adalah penting untuk ambil perhatian bahawa kelakuan pengendali '&' mungkin berbeza merentas sistem pengendalian dan versi PHP. Adalah disyorkan untuk menguji penyelesaian dalam persekitaran sasaran khusus untuk operasi yang betul.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Skrip Shell Secara Asynchronous dalam PHP Tanpa Menyekat Permintaan Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!