Pemantauan Output Langsung dengan Shell_exec PHP
Fungsi shell_exec PHP menyediakan cara yang mudah untuk melaksanakan perintah sistem dari dalam skrip PHP. Walau bagaimanapun, secara lalai, ia mengembalikan keseluruhan output arahan hanya selepas selesai. Pengehadan ini boleh menyukarkan untuk memantau kemajuan langsung bagi perintah yang berjalan lama atau interaktif.
Untuk menangani had ini, PHP menawarkan pilihan alternatif yang membolehkan pengaturcara membaca dan memaparkan output arahan secara berperingkat, membolehkan pengguna memerhati status proses secara langsung.
Salah satu pendekatan sedemikian ialah menggunakan fungsi popen() PHP. popen() membenarkan skrip membuka aliran stdout proses sebagai aliran PHP, membolehkan pembangun berinteraksi dengannya seolah-olah ia adalah fail biasa. Ini membolehkan anda membaca output arahan dalam masa nyata menggunakan kaedah seperti fread().
Kaedah lain yang memudahkan paparan output langsung ialah fungsi passthru(). Fungsi ini secara langsung mengeluarkan hasil arahan kepada penimbal keluaran semasa tanpa menyimpannya dalam pembolehubah. Pendekatan ini amat berguna untuk memaparkan output dengan cepat daripada arahan tanpa memerlukan pemprosesan atau manipulasi tambahan.
Untuk menunjukkan penggunaan popen() untuk pemantauan output langsung, pertimbangkan kod berikut:
<?php echo '<pre class="brush:php;toolbar:false">'; // Start the ping process $proc = popen('ping -c 10 127.0.0.1', 'r'); // Continuously read the output and display it in real-time while (!feof($proc)) { echo fread($proc, 4096); flush(); } echo '';
Dalam contoh ini, popen() digunakan untuk membuka strim stdout bagi arahan ping dan menetapkannya kepada pembolehubah $proc. Di dalam gelung sementara, fungsi fread() digunakan untuk terus membaca dan memaparkan output daripada arahan dalam masa nyata. Fungsi flush() dipanggil untuk memastikan bahawa output dihantar terus ke penyemak imbas pengguna tanpa sebarang penimbalan. Dengan menggunakan popen() dan fread(), kod ini membolehkan pembangun memantau kemajuan langsung arahan ping dan memerhatikan keputusan semasa ia dijana.
Perlu ambil perhatian bahawa penggunaan teknik ini boleh mengganggu sesetengah orang. konfigurasi pelayan, seperti sesi atau penimbalan nginx. Untuk menangani isu ini, pertimbangkan untuk memanggil session_write_close() sebelum memasuki gelung penimbalan output atau menetapkan pengepala pengepala('X-Accel-Buffering: no'); untuk mengelakkan nginx daripada menimbal keluaran.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memantau Output Langsung daripada Perintah Shell dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!