摘要:译注是创建了一个子进程,父进程和子进程都从的位置开始向下继续执行,不同的是父进程执行过程中,得到的返回值为子进程号,而子进程得到的是。子进程得到的为所以这里是子进程执行的逻辑。
说明
脚本文件为: phpCli linux文件路径: /usr/local/bin/phpCli (需要可执行权限 chmod +x phpCli) linux执行: phpCli window执行: php phpCli1.hash-bang 声明
#!/usr/local/bin/php -Cq
针对 linux 使用声明,将脚本放置 linux 系统 默认shell执行位置 /usr/local/bin
文件名(一般无后缀)就是命令名称 phpCli 对应执行命令为 /usr/local/bin/php -Cq /usr/local/bin/phpCli 参数
脚本操作比较大时建议 用后即焚 (关闭文件操作符,清空数组,关闭连接等)
2.基本参数var_dump($argv); /*array(2) { [0]=> string(6) "phpCli" [1]=> string(4) "test" }*/
运行:phpCli test ;
cli 模式下,参数会保存在$argv中.
print "please input something !"." "; $message = trim(fgets(STDIN)); var_dump($message); //test
标准输入在 PHP流的 STDIN 中,或者 unix风格的 "终端输入" 设备 /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风格)的选项.
默认是与PHP绑定安装的,除非你关闭了PEAR .
也可以自行定义 .
使用信息
退出代码
错误信息
大多数都是用 一个简短信息来响应 -h | -help
6.进程控制/*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"; }
进程概念(自行了解)
Forking概念(自行了解)
7.简单例子#!/usr/local/bin/php -Cq "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 " "; 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 以数组形式返回 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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31642.html
摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...
摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...
摘要:入门,第一个这是一门很新的语言,年前后正式公布,算起来是比较年轻的编程语言了,更重要的是它是面向程序员的函数式编程语言,它的代码运行在之上。它通过编辑类工具,带来了先进的编辑体验,增强了语言服务。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不觉已经到来了,总结过去的 2017,相信小伙们一定有很多收获...
阅读 2930·2023-04-25 19:45
阅读 2640·2021-11-19 09:40
阅读 653·2021-10-14 09:49
阅读 2559·2021-09-30 09:47
阅读 2060·2021-09-26 09:55
阅读 1161·2021-09-22 16:01
阅读 2779·2019-08-30 14:19
阅读 672·2019-08-29 16:44