องค์ประกอบคลาสกระบวนการดำเนินการคำสั่งใน proc_open
ฉันเขียนแพ็คเกจนี้ใหม่และแบ่งออกเป็นสองแพ็คเกจ
กรุณาใช้ชั้นเรียนเหล่านี้ แทนที่จะใช้แพ็คเกจนี้
แพ็คเกจนี้มีวัตถุประสงค์เพื่อใช้เป็นแพ็คเกจผู้แต่งไฟล์เดียวไม่ซับซ้อน
<?php
$ proc1 = new Process ( ' sh ' );
$ fd_out = $ proc1 -> setInput ( ' echo HelloWorld ' )
-> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> pipe ([ ' grep ' , ' Hello ' ])
-> wait ();
$ ret = stream_get_contents ( $ fd_out );
→ อ่านตัวอย่างเพิ่มเติมสำหรับการใช้งาน
composer require takuya/process
กระบวนการจะส่งคืน IO ที่บัฟเฟอร์สำหรับการอ่าน/เขียน
วิธีการจะส่งคืนกระแส
<?php
$ proc = new Process ([ ' echo ' , ' HelloWorld ' ]);
$ fd_out = $ proc -> run ();
$ output = stream_get_contents ( $ fd_out );
// you can reuse, re-read output
fseek ( $ fd_out , 0 );
$ str = stream_get_contents ( $ fd_out );
<?php
$ proc = new Process ( ' sh sleep.sh ' );
$ proc -> start ();
echo ' started ' ;
$ proc -> join ();
Process#pipe() สามารถใช้โปรแกรม PIPE ได้
เชื่อมต่อไปป์ stdout โดยนัย -> stdin
<?php
$ proc = new Process ([ ' echo ' , ' HelloWorld ' ]);
$ fd_out = $ proc -> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> pipe ( ' cat ' )
-> wait ();
ไปป์อย่างชัดเจน เชื่อมต่อ (Proc1#)stdout -> (Proc2#)stdin
<?php
$ proc1 = new Process ([ ' echo ' , ' HelloWorld ' ]);
$ proc2 = new Process ([ ' cat ' ]);
[ $ p1_out , $ p1_err ] = $ proc1 -> start ();
$ proc2 -> setInput ( $ p1_out );
$ proc2 -> start ();
$ proc2 -> wait ();
$ proc1 -> wait ();
หมายเหตุ: $proc2->wait()
โทรก่อนเพื่อหลีกเลี่ยงการล็อคนานเพื่อรันสองกระบวนการพร้อมกัน เหตุผลก็คือคลาส Process
ใช้ IOBuffering โดยนัยที่ wait
ดังนั้น calling wait()
หมายความว่าจะรันสตรีมบัฟเฟอร์ลูปจนกว่ากระบวนการจะสิ้นสุด
ไม่ต้องใช้แพ็คเกจเพิ่มเติม
จำเป็นต้องใช้ไฟล์เดียว src/Process.php
แค่เขียน need_once แบบนี้
<?php
require_once ' src/Process.php ' ;
Process class
นี้เขียนโดย vanilla php ไม่มีแพ็คเกจเสริม ไม่มีลูกแพร์ ไม่มีผู้แต่ง ไม่จำเป็นต้องติดตั้งแพ็คเกจอื่น
การใช้สิ่งนี้โดยไม่มี composer.phar
หรือตัวจัดการแพ็คเกจอื่นๆ สิ่งที่คุณต้องมีก็แค่เขียน need_once
การใช้งานเพิ่มเติม อ่านไฟล์ใน procjet /samples
, /tests/Features
และ ./docs
นี้