Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Mendapatkan Output Masa Nyata daripada Perintah Shell dalam PHP?

Bagaimanakah Saya Boleh Mendapatkan Output Masa Nyata daripada Perintah Shell dalam PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 20:03:16325semak imbas

How Can I Get Real-Time Output from Shell Commands in PHP?

Output Masa Nyata dengan PHP's Shell Execution

Shell execution dalam PHP, menggunakan fungsi seperti shell_exec dan exec, boleh memberi manfaat untuk berinteraksi dengan sistem pengendalian. Walau bagaimanapun, secara lalai, fungsi ini memaparkan keseluruhan output hanya selepas arahan selesai. Ini mengehadkan keupayaan untuk memantau kemajuan atau memaparkan kemas kini masa nyata.

Penyelesaian: Melancarkan Output Langsung

Untuk mencapai paparan output masa nyata, PHP menawarkan dua utama pilihan:

  1. popen() untuk Selari Interaksi:

    popen() membolehkan anda mewujudkan saluran komunikasi dua hala dengan proses anak. Ini membolehkan anda membaca dan menulis kepada proses kanak-kanak seolah-olah ia adalah fail. Dengan menggunakan gelung dan fread(), anda boleh menangkap output dan memaparkannya secara dinamik.

  2. passthru() untuk Output Terus:

    Untuk pendekatan yang lebih mudah, passthru() boleh digunakan untuk mencetak terus output arahan ke penyemak imbas. Ia menyediakan cara yang mudah untuk menstrim hasil tanpa storan perantara.

Contoh Kod Menggunakan popen():

// Ensure flushing of output buffers
while (@ ob_end_flush());

// Open the child process for reading
$proc = popen($cmd, 'r');

echo '<pre class="brush:php;toolbar:false">';

// Keep reading and displaying output until EOF
while (!feof($proc)) {
    echo fread($proc, 4096);
    flush();
}

echo '
'; // Close the process pclose($proc);

Nota:

  • Gunakan session_write_close() sebelum gelung jika sesi aktif untuk mengelak menyekat permintaan serentak.
  • Tetapkan pengepala pengepala('X-Accel-Buffering: no'); jika Nginxgateway hadir untuk melumpuhkan penimbalan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Output Masa Nyata daripada Perintah Shell dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn