摘要:譯注是創(chuàng)建了一個子進(jìn)程,父進(jìn)程和子進(jìn)程都從的位置開始向下繼續(xù)執(zhí)行,不同的是父進(jìn)程執(zhí)行過程中,得到的返回值為子進(jìn)程號,而子進(jìn)程得到的是。子進(jìn)程得到的為所以這里是子進(jìn)程執(zhí)行的邏輯。
說明
腳本文件為: phpCli linux文件路徑: /usr/local/bin/phpCli (需要可執(zhí)行權(quán)限 chmod +x phpCli) linux執(zhí)行: phpCli window執(zhí)行: php phpCli1.hash-bang 聲明
#!/usr/local/bin/php -Cq
針對 linux 使用聲明,將腳本放置 linux 系統(tǒng) 默認(rèn)shell執(zhí)行位置 /usr/local/bin
文件名(一般無后綴)就是命令名稱 phpCli 對應(yīng)執(zhí)行命令為 /usr/local/bin/php -Cq /usr/local/bin/phpCli 參數(shù)
腳本操作比較大時建議 用后即焚 (關(guān)閉文件操作符,清空數(shù)組,關(guān)閉連接等)
2.基本參數(shù)var_dump($argv); /*array(2) { [0]=> string(6) "phpCli" [1]=> string(4) "test" }*/
運行:phpCli test ;
cli 模式下,參數(shù)會保存在$argv中.
print "please input something !"." "; $message = trim(fgets(STDIN)); var_dump($message); //test
標(biāo)準(zhǔn)輸入在 PHP流的 STDIN 中,或者 unix風(fēng)格的 "終端輸入" 設(shè)備 /dev/tty 中獲得.
運行:phpCli 會得到提示語 please input something ! .
輸入信息 test ,var_dump($message)會輸出 test .
//這里使用了自定義 switch ("test") { case "-m": $this->shell = "php -m"; break; case "-v": echo $this->command." 1.0.1-dev (cli)"; $this->putFormat(true); break; case "-h": case "-help": $this->help(); break; default: $this->help(); break; }
PEAR 提供了 Console_Getopt包可以同時支付簡短和長格式(GNU風(fēng)格)的選項.
默認(rèn)是與PHP綁定安裝的,除非你關(guān)閉了PEAR .
也可以自行定義 .
使用信息
退出代碼
錯誤信息
大多數(shù)都是用 一個簡短信息來響應(yīng) -h | -help
6.進(jìn)程控制/*pcntl_fork — 在當(dāng)前進(jìn)程當(dāng)前位置產(chǎn)生分支(子進(jìn)程)。 譯注:fork是創(chuàng)建了一個子進(jìn)程,父進(jìn)程和子進(jìn)程 都從fork的位置開始向下繼續(xù)執(zhí)行, 不同的是父進(jìn)程執(zhí)行過程中,得到的fork返回值為子進(jìn)程 號,而子進(jìn)程得到的是0。 */ $pid = pcntl_fork(); //父進(jìn)程和子進(jìn)程都會執(zhí)行下面代碼 if ($pid == -1) { //錯誤處理:創(chuàng)建子進(jìn)程失敗時返回-1. die("could not fork"); } else if ($pid) { //父進(jìn)程會得到子進(jìn)程號,所以這里是父進(jìn)程執(zhí)行的邏輯 echo "this is parent test" ; pcntl_wait($status); //等待子進(jìn)程中斷,防止子進(jìn)程成為僵尸進(jìn)程。 } else { //子進(jìn)程得到的$pid為0, 所以這里是子進(jìn)程執(zhí)行的邏輯。 echo "this is son test"; }
進(jìn)程概念(自行了解)
Forking概念(自行了解)
7.簡單例子#!/usr/local/bin/php -Cq "docker ps", "dsa" => "docker ps -a" ] ; /** 執(zhí)行shell * @var */ private $shell ; /** * PHPCli constructor. * @param $argv */ public function __construct($argv) { # 基本參數(shù) 入口文件 $this->initFirst = $argv[0] ; array_shift($argv); $this->initData = $argv ; } /** 格式輸出 * @param bool $end */ private function putFormat($end = false) { print " "; if($end) { exit(); } } /* * 使用說明 */ private function help() { $this->putFormat(); print "Usage: ".$this->command." Command"." "; $this->putFormat(); print "Options:"." "; print " -v Show phpCli version"." "; print " -m Show php model"." "; print " -h Display this help"." "; $this->putFormat(); print "Commands:"." "; print " ds Run docker command `docker ps`"." "; print " dsa Run docker command `docker ps -a`"." "; $this->putFormat(); exit(); } /** shell運行 * @return mixed */ private function shell() { if(!$this->shell) { exit(); } if($this->format) { //$status 格式輸出 system($this->shell, $status); }else{ // $status 以數(shù)組形式返回 exec($this->shell, $status); } //passthru(); return $status ; } /** * 功能入口 */ public function run() { $label = $this->initData[0] ?? "" ; if(empty($label)) { $this->help(); } if($label[0] == "-") { switch ($label) { //可擴展其它短命令 case "-m": $this->shell = "php -m"; break; case "-v": echo $this->command." 1.0.1-dev (cli)"; $this->putFormat(true); break; case "-h": case "-help": $this->help(); break; default: $this->help(); break; } }else{ if(in_array($label,$this->runCommand)) { //可擴展更多shell $this->shell = $this->shellMap[$label]; }else{ echo "Run "".$this->command." -help" for more information on a command."; $this->putFormat(true); } } $this->shell(); } } $phpCli = new PHPCli($argv); $phpCli->run(); exit();
運行: phpCli
運行: phpCli -m
運行:phpCli dsa
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31642.html
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 2980·2023-04-25 19:45
閱讀 2697·2021-11-19 09:40
閱讀 703·2021-10-14 09:49
閱讀 2712·2021-09-30 09:47
閱讀 2243·2021-09-26 09:55
閱讀 1234·2021-09-22 16:01
閱讀 2821·2019-08-30 14:19
閱讀 715·2019-08-29 16:44