腳本文件爲: phpCli linux文件路徑: /usr/local/bin/phpCli (須要可執行權限 chmod +x phpCli) linux執行: phpCli window執行: php phpCli
#!/usr/local/bin/php -Cq
var_dump($argv); /*array(2) { [0]=> string(6) "phpCli" [1]=> string(4) "test" }*/
運行:phpCli test ;
cli 模式下,參數會保存在$argv中.php
print 'please input something !'."\n"; $message = trim(fgets(STDIN)); var_dump($message); //test
標準輸入在 PHP流的 STDIN 中,或者 unix風格的 '終端輸入' 設備 /dev/tty 中得到.
運行:phpCli 會獲得提示語 please input something ! .
輸入信息 test ,var_dump($message)會輸出 test .linux
//這裏使用了自定義 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風格)的選項.
默認是與PHP綁定安裝的,除非你關閉了PEAR .
也能夠自行定義 .docker
/*pcntl_fork — 在當前進程當前位置產生分支(子進程)。 譯註:fork是建立了一個子進程,父進程和子進程 都從fork的位置開始向下繼續執行, 不一樣的是父進程執行過程當中,獲得的fork返回值爲子進程 號,而子進程獲得的是0。 */ $pid = pcntl_fork(); //父進程和子進程都會執行下面代碼 if ($pid == -1) { //錯誤處理:建立子進程失敗時返回-1. die('could not fork'); } else if ($pid) { //父進程會獲得子進程號,因此這裏是父進程執行的邏輯 echo 'this is parent test' ; pcntl_wait($status); //等待子進程中斷,防止子進程成爲殭屍進程。 } else { //子進程獲得的$pid爲0, 因此這裏是子進程執行的邏輯。 echo 'this is son test'; }
#!/usr/local/bin/php -Cq <?php class PHPCli { /** 命令名稱 * @var string */ private $command = 'phpCli'; /** 輸入數據 * @var */ private $initData ; /** 首個數據 * @var */ private $initFirst ; /** 格式化輸出 * @var bool */ private $format = true; /** @var array 命令支持 */ private $runCommand = ['ds','dsa'] ; /** @var array */ private $shellMap = [ 'ds' => 'docker ps', 'dsa' => 'docker ps -a' ] ; /** 執行shell * @var */ private $shell ; /** * PHPCli constructor. * @param $argv */ public function __construct($argv) { # 基本參數 入口文件 $this->initFirst = $argv[0] ; array_shift($argv); $this->initData = $argv ; } /** 格式輸出 * @param bool $end */ private function putFormat($end = false) { print "\n"; if($end) { exit(); } } /* * 使用說明 */ private function help() { $this->putFormat(); print 'Usage: '.$this->command.' Command'."\n"; $this->putFormat(); print 'Options:'."\n"; print ' -v Show phpCli version'."\n"; print ' -m Show php model'."\n"; print ' -h Display this help'."\n"; $this->putFormat(); print 'Commands:'."\n"; print ' ds Run docker command `docker ps`'."\n"; print ' dsa Run docker command `docker ps -a`'."\n"; $this->putFormat(); exit(); } /** shell運行 * @return mixed */ private function shell() { if(!$this->shell) { exit(); } if($this->format) { //$status 格式輸出 system($this->shell, $status); }else{ // $status 以數組形式返回 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 shell
運行: phpCli -m
數組
運行:phpCli dsa
this