


Cara menggunakan proc_open untuk melaksanakan dan berkomunikasi dengan arahan luaran dalam php
Oct 11, 2025 am 03:13 AMPROC_OPEN menyediakan kawalan lengkap ke atas aliran input dan output proses dan menyokong komunikasi dua hala dengan program luaran. Tentukan paip stdin, stdout, dan stderr melalui descriptorspec untuk menghantar data ke kalkulator BC dalam masa nyata dan baca hasilnya. Paip perlu ditutup dengan betul, masa tamat dan kesilapan yang dikendalikan, dan proses mesti berinteraksi dengan mantap.
Menggunakan proc_open dalam php membolehkan anda melaksanakan program luaran dan berinteraksi dengan mereka melalui aliran input/output. Tidak seperti fungsi yang lebih mudah seperti EXEC atau SHELL_EXEC , proc_open memberikan kawalan penuh ke atas stdin, stdout, dan stderr, yang membolehkan komunikasi dua hala.
Memahami asas proc_open
Fungsi proc_open memulakan proses dan mengembalikan sumber (pemegang proses) yang membolehkan anda membaca dan menulis ke program. Ia menyokong interaksi kompleks seperti menghantar input semasa pelaksanaan atau output membaca dalam masa nyata.
Sintaks:
proc_open(string $command, array $descriptorspec, array &$pipes, ?string $cwd = null, ?array $env = null, ?array $options = null): resource|false
- $ perintah : Perintah luaran untuk dijalankan.
- $ descriptorspec : menerangkan cara mengalihkan stdin, stdout, dan stderr.
- $ PIPES : Akan dihuni dengan petunjuk fail untuk komunikasi.
- $ cwd : Direktori kerja untuk arahan.
- $ env : Pembolehubah persekitaran untuk lulus.
Menyediakan paip komunikasi
Anda menentukan bagaimana aliran data menggunakan array $ descriptorspec . Setiap indeks sepadan dengan deskriptor fail (0 = stdin, 1 = stdout, 2 = stderr).
Contoh: Sediakan paip untuk input dan output:
$ descriptorspec = [ 0 => ['Pipe', 'R'], // Stdin - Baca oleh Proses 1 => ['paip', 'w'], // stdout - ditulis oleh proses 2 => ['paip', 'w'] // stderr - ditulis oleh proses ];
Ini menetapkan komunikasi dua arah: skrip anda boleh menulis kepada stdin proses dan dibaca dari stdout dan stderrnya.
Melaksanakan dan berkomunikasi dengan arahan
Berikut adalah contoh lengkap yang menjalankan BC (kalkulator ketepatan sewenang -wenang) dan menghantarnya ungkapan matematik:
$ proses = proc_open ('bc', $ descriptorspec, $ pipes); <p>jika (is_resource ($ proses)) { // Hantar input FWRITE ($ PIPES [0], "5 3 \ n"); fWRITE ($ PIPES [0], "sqrt (16) \ n"); fclose ($ paip [0]); // tutup stdin untuk memberi isyarat akhir</p><pre class="brush:php;toolbar:false"> <code>// Read output $output = stream_get_contents($pipes[1]); fclose($pipes[1]); // Read errors (if any) $error = stream_get_contents($pipes[2]); fclose($pipes[2]); // Close the process $return_value = proc_close($process); echo "Output:\n$output"; if ($error) { echo "Error:\n$error"; } echo "Return code: $return_value";</code><p> }
Dalam kes ini, BC membaca dari Stdin, mengira ungkapan, dan menulis hasil kepada Stdout.
Mengendalikan kesilapan dan masa tamat
Perintah luaran boleh digantung atau gagal. Gunakan proc_terminate untuk menghentikan proses selepas waktu tamat:
$ start_time = time (); sementara (! feof ($ paip [1])) { jika (masa () - $ start_time> 10) {// 10 -second Timeout proc_terminate ($ proses); echo "proses masa keluar."; rehat; } $ line = fgets ($ paip [1]); jika ($ line) { echo "diterima: $ line"; } usleep (100000); // Mencegah CPU berputar }
Sentiasa semak kod balik melalui proc_close untuk mengesan kegagalan.
Pada asasnya, proc_open berkuasa apabila anda memerlukan interaksi masa nyata dengan alat luaran, pengkompil, atau daemon seperti luaran. Ingatlah untuk menutup paip dan mengendalikan kesilapan dengan betul.
Atas ialah kandungan terperinci Cara menggunakan proc_open untuk melaksanakan dan berkomunikasi dengan arahan luaran dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Versi penuh komik Mantixing adalah https://www.mantianxingmh.com. Platform ini merangkumi pelbagai tema seperti semangat, cinta, ketegangan, fiksyen sains, dan lain -lain, dengan sumber yang kaya dan kemas kini yang tepat pada masanya dan menyokong pengambilan semula diklasifikasikan; Ia menyediakan kualiti gambar definisi tinggi, mod beralih halaman, latar belakang tersuai dan pelarasan kecerahan, dan mempunyai mod perlindungan mata untuk mengoptimumkan pengalaman membaca; Pengguna boleh membuat rak buku, menyimpan rekod bacaan, muat turun di luar talian, dan mencapai kemajuan penyegerakan silang peranti.

Oopinphporganizescodeintoreusableclassesandobjects.1.classdefinepropertymethods, instantiatedvia $ this.2.constructors (__ construct) InitializeObjectProperties.3.AccessModifiers (awam, swasta, dilindungi) Controlvisibility.4.Iherance)

Gunakan fungsi Unlink () untuk memadam fail dalam PHP. Anda perlu memastikan bahawa laluan fail betul dan pelayan mempunyai kebenaran menulis. Sebelum penghapusan, anda harus mengesahkan bahawa fail itu wujud dan menghalang jalan daripada dimanipulasi secara berniat jahat.

Gunakan mysqli_insert_id () (gaya prosedur), $ mysqli-> insert_id (gaya objek), atau $ pdo-> lastInsertId () (pdo) untuk mendapatkan ID dimasukkan terakhir dan perlu dipanggil dengan segera dalam sambungan yang sama untuk memastikan ketepatan.

FinalclassesesandmethodsinphppreventinheritanceAndoverRidingToprotectcriticalcode.2.afinalclasscannotbeextended, memastikanSingitsbehaviorRemainSunchanged.3.afinalmethodcannotbeoverridden.

Gunakan sebut harga tunggal atau melepaskan petikan berganda ke output HTML dalam PHP. Adalah disyorkan untuk membungkus rentetan dengan petikan tunggal untuk mengelakkan konflik petikan atribut. Kandungan dinamik boleh dihasilkan dalam kombinasi dengan splicing berubah atau sintaks Heredoc.

Gunakan $ _getToAccessurlQueryStringVariablesInphp, suchasName = Johnandage = 30FromHttps: //example.com/search.php? Name = John & Age = 30;

AsingletonclassinphpensuresonlyoneinstanceExistusingAprivateconstructor, mencegahCloningandunserialization, danProvidingaglobalaccesspointviaastaticmethodthatreturnsthesingleinstancestestoredinaprivatestaticaticyproperty.
