成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? PHP:proc_open()的用法_命令行函數
全站頭部文字 我要出現在這里
PHP:proc_open()的用法_命令行函數 800 2023-12-15   

proc_open

(PHP 4 >= 4.3.0, PHP 5)

proc_open — 執行一個命令,并且打開用來輸入/輸出的文件指針。

說明

resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )

類似 popen() 函數, 但是 proc_open() 提供了更加強大的控制程序執行的能力。

參數

cmd

要執行的命令

descriptorspec

一個索引數組。 數組的鍵表示描述符,數組元素值表示 PHP 如何將這些描述符傳送至子進程。 0 表示標準輸入(stdin),1 表示標準輸出(stdout),2 表示標準錯誤(stderr)。

數組中的元素可以是: 包含了要傳送至進程的管道的描述信息。 第一個元素為描述符類型, 第二個元素是針對該描述符的選項。 有效的類型有:pipe (第二個元素可以是: r 向進程傳送該管道的讀取端,w 向進程傳送該管道的寫入端), 以及 file(第二個元素為文件名)。 表達一個真實文件描述符的流資源類型 (例如:已打開的文件,一個 socket 端口,STDIN)。

文件描述符的值不限于 0,1 和 2,你可以使用任何有效的文件描述符 并將其傳送至子進程。 這使得你的腳本可以和其他腳本交互操作。 例如,可以通過指定文件描述符將密碼以更加安全的方式 傳送至諸如 PGP,GPG 和 openssl 程序, 同時也可以很方便的獲取這些程序的狀態信息。

pipes

將被置為索引數組, 其中的元素是被執行程序創建的管道對應到 PHP 這一端的文件指針。

cwd

要執行命令的初始工作目錄。 必須是 絕對 路徑, 設置此參數為 NULL 表示使用默認值(當前 PHP 進程的工作目錄)。

env

要執行的命令所使用的環境變量。 設置此參數為 NULL 表示使用和當前 PHP 進程相同的環境變量。

other_options

你還可以指定一些附加選項。 目前支持的選項包括: suppress_errors (僅用于 Windows 平臺): 設置為 TRUE 表示抑制本函數產生的錯誤。 bypass_shell (僅用于 Windows 平臺): 設置為 TRUE 表示繞過 cmd.exe shell。

返回值

返回表示進程的資源類型, 當使用完畢之后,請調用 proc_close() 函數來關閉此資源。 如果失敗,返回 FALSE

更新日志

版本 說明 5.2.1 為 other_options 參數增加 bypass_shell 選項。 5.0.0 增加 cwdenvother_options 參數。

范例

Example #1 proc_open() 例程

<?php
$descriptorspec = array(
   0 => array("pipe", "r"),  // 標準輸入,子進程從此管道中讀取數據
   1 => array("pipe", "w"),  // 標準輸出,子進程向此管道中寫入數據
   2 => array("file", "/tmp/error-output.txt", "a") // 標準錯誤,寫入到一個文件
);

$cwd = '/tmp';
$env = array('some_option' => 'aeiou');

$process = proc_open('php', $descriptorspec, $pipes, $cwd, $env);

if (is_resource($process)) {
    // $pipes 現在看起來是這樣的:
    // 0 => 可以向子進程標準輸入寫入的句柄
    // 1 => 可以從子進程標準輸出讀取的句柄
    // 錯誤輸出將被追加到文件 /tmp/error-output.txt

    fwrite($pipes[0], '<?php print_r($_ENV); ?>');
    fclose($pipes[0]);

    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);
    

    // 切記:在調用 proc_close 之前關閉所有的管道以避免死鎖。
    $return_value = proc_close($process);

    echo "command returned $return_valuen";
}
?>

以上例程的輸出類似于:

Array
(
    [some_option] => aeiou
    [PWD] => /tmp
    [SHLVL] => 1
    [_] => /usr/local/bin/php
)
command returned 0

注釋

Note:

Windows 兼容性:超過 2 的描述符也可以作為可繼承的句柄傳送到子進程。 但是,由于 Windows 的架構并不將文件描述符和底層句柄進行關聯, 所以,子進程無法訪問這樣的句柄。 標準輸入,標準輸出和標注錯誤會按照預期工作。

Note:

如果你只需要單向的進程管道, 使用 popen() 函數會更加簡單。

參見

popen() - 打開進程文件指針 exec() - 執行一個外部程序 system() - 執行外部程序,并且顯示輸出 passthru() - 執行外部程序并且顯示原始輸出 stream_select() - Runs the equivalent of the select() system call on the given arrays of streams with a timeout specified by tv_sec and tv_usec The 執行操作符


主站蜘蛛池模板: 成人免费视频视频| 大树君| 美国伦理三颗熟樱桃| 女孩们的周末| 超在线视频| 男骑女| 侠侣探案| 电影《迷雾》完整版免费播放高清 | 烽火流金电视剧全集免费观看| 芝加哥急救| 哪吒电影1| 电视剧《唐太宗李世民》| 兰陵王电影| 野性狂欢大派对| 梵缺| river flows in you吉他谱| 杨幂三级| 掩护| 傅首尔个人资料| 刘慧| 邓伦是石家庄哪里的| 电影终极之战 电影| 北京卫视今天节目预告| 谈判专家 电影| 楼下的女邻居| 南昌起义 电影| 皮肤诊所| 《诱惑》电影| free hd xxxx moms movie777| 勿言推理 电视剧| 黑水电影| 饥渴电影完整版| 故乡,别来无恙演员表| 我们的日子演员表| 孙炜| 金奎丽| 八角笼中电影| 欲海浮沉| 超级小熊布迷全集免费观看| 美女写真视频高清福利| 美人天下|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103