久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

PHP實現執行外部程序的方法詳解

這篇文章主要介紹了PHP實現執行外部程序的方法,結合實例形式分析了php執行外部程序的常用函數相關使用技巧與注意事項,需要的朋友可以參考下

本文實例講述了PHP實現執行外部程序的方法。分享給大家供大家參考,具體如下:

在一些特殊情況下,會使用PHP調用外部程序執行,比如:調用shell命令、shell腳本、可執行程序等等,今天在源碼中了解了一下PHP執行外部程序的方法,借此機會順便整理一下。

在源碼中 exec.h文件中,列出了可調用外部程序的幾個函數,藍色框里的兩個函數只是輔助作用,本文只對其他幾個函數做介紹。

PHP實現執行外部程序的方法詳解

前提

1 PHP沒有運行在安全模式,關掉安全模式,即:safe_mode = off

2 禁用函數列表 disable_functions =  exec, system, shell_exec,proc_open, popen, 如果禁用了,就關掉。

注意:執行外部程序是存在風險的,所以使用這些函數要在確保安全的情況下使用。

exec() 函數

原型:string exec ( string command [, array &output [, int &return_var]] )

描述:返回值保存最后的輸出結果,而所有輸出結果將會保存到$output數組,$return_var用來保存命令執行的狀態碼(用來檢測成功或失敗)。

例子:

<?php
exec('whoami',$output, $status);
var_dump($output);
exit;

輸出結果:

array(1) {
 [0]=>
 string(7) "hedong"
}

注意:

① 輸出結果會逐行追加到$output中,因此在調用exec之前需要unset($output),特別是循環調用的時候。

② 如果想通過exec調用外部程序后馬上繼續執行后續代碼,僅僅在命令里加"&"是不夠的,此時exec依然會等待命令執行完畢;需要再將標準輸出做重定向才可以,例如:exec("ls -al >/dev/null &", $output, $var);

shell_exec() 函數

原型:string shell_exec( string command)

描述:通過 shell 環境執行命令,并且將完整的輸出以字符串的方式返回。

例子:

<?php
$output = shell_exec('whoami');
echo "$output"; // hedong
exit;

注意:

當進程執行過程中發生錯誤,或者進程不產生輸出的情況下,都會返回 NULL, 所以,使用本函數無法通過返回值檢測進程是否成功執行。 如果需要檢查進程執行的退出碼,請使用 exec() 函數。

system() 函數

原型:string system ( string command [, int &return_var] )

描述:執行給定的命令,返回最后的輸出結果;第二個參數是可選的,用來得到命令執行后的狀態碼。

例子:

<?php
system("whoami", $status); // 直接輸出
var_dump($status); // 成功時狀態碼是 0
exit;

輸出結果:hedong

passthru() 函數

原型:void passthru (string command [, int return_var])

描述:執行給定的命令,但不返回任何輸出結果,而是直接輸出到顯示設備上;第二個參數可選,用來得到命令執行后的狀態碼。

用途:當所執行的 Unix 命令輸出二進制數據, 并且需要直接傳送到瀏覽器的時候, 需要用此函數來替代 exec() 或 system() 函數

例子:

<?php
passthru("whoami", $status); // 直接輸出
var_dump($status); // 成功時狀態碼是 0
exit;

輸出結果:hedong

popen() 函數

原型:resource popen ( string command, string mode )

描述:打開一個指向進程的管道,該進程由派生給定的 command 命令執行而產生。 返回一個和 fopen() 所返回的相同的文件指針,只不過它是單向的(只能用于讀或寫)并且必須用 pclose() 來關閉。此指針可以用于 fgets(),fgetss() 和 fwrite()。

例子:

$fd = popen("command", 'r');
$ret = fgets($fd);

注意:只能打開單向管道,不是'r'就是'w';并且需要使用pclose()來關閉。

proc_open() 函數

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

描述:與popen類似,但是可以提供雙向管道。

例子:

<?php
/**
 * @author: hedong
 * @date 2017-04-04
 */
// 管道配置
$descriptors = array(
  0 => array("pipe", "r"),
  1 => array("pipe", "w")
);
$process = proc_open("php", $descriptors, $pipes);
if (is_resource($process)) {
  fwrite($pipes[0], "<?php\n");
  fwrite($pipes[0], " \$rand = rand(1,2);\n");
  fwrite($pipes[0], " if (\$rand == 1) {\n");
  fwrite($pipes[0], "  echo \"Hello, World!\n\";\n");
  fwrite($pipes[0], " } else {");
  fwrite($pipes[0], "  echo \"Goodbye, World!\n\";\n");
  fwrite($pipes[0], " }");
  fwrite($pipes[0], "?>");
  fclose($pipes[0]);
  $output = "";
  while (!feof($pipes[1])) {
    $output .= fgets($pipes[1]);
  }
  $output = strtoupper($output);
  echo $output; fclose($pipes[1]);
  proc_close($process);
}

輸出結果:

GOODBYE, WORLD!

注意:

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結合實例形式分析了php實現針對有序表插值查找的相關操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實現服務端分頁的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實現APP微信支付的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實現的多維數組排序算法,結合實例形式對比分析了php針對多維數組及帶有鍵名的多維數組進行排序相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了php結合ajaxuploadfile實現無刷新文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細介紹了PHP開發接口使用RSA進行加密解密方法,對此有興趣的朋友可以學習下。
主站蜘蛛池模板: 欧美自拍第一页 | 天天欧美 | 成人深夜福利在线观看 | 亚洲视频在线一区 | 香蕉久久网 | 免费福利视频一区二区三区 | 中文字幕亚洲区一区二 | 中文字字幕一区二区三区四区五区 | 免费看一区二区三区 | 天天操夜夜骑 | 成人黄色网址大全 | 欧美在线高清 | 久久久久久高潮国产精品视 | 亚洲欧洲精品在线 | 国产成人福利 | 九九色综合| 亚洲成a | 成人午夜视频在线观看 | 日日操日日舔 | 国产精品日韩欧美一区二区 | 欧美区在线| www.日本国产 | 久草视频观看 | 亚洲一区二区三区四区五区中文 | 黄色一级免费看 | 国产精品一区三区 | 亚洲精品久久久久中文字幕欢迎你 | 欧美极品少妇xxxxⅹ免费视频 | 精品国产18久久久久久二百 | 国产精品视频免费 | 国产欧美精品一区二区色综合 | 啪啪毛片 | 久久亚洲一区二区三区四区 | 免费在线国产视频 | 成人在线一区二区三区 | 日韩视频a | 国产精品美女www爽爽爽 | 国产中文字幕网 | 久久精品欧美一区二区三区麻豆 | 2018天天干天天操 | 亚洲人的av |