当前位置: 首页 > 后端技术 > PHP

phpshell编程

时间:2023-03-30 03:59:00 PHP

表示脚本文件为:phpClilinux文件路径:/usr/local/bin/phpCli(需要可执行权限chmod+xphpCli)linux执行:phpCliwindow执行:phpphpCli1.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"}*/Run:phpClitest;在cli模式下,参数将保存在$argv中。3.UserInputprint'pleaseinputsomething!'."\n";$message=trim(fgets(STDIN));var_dump($message);//测试标准输入是PHP流的STDIN,还是unix风格'terminalinput'从设备/dev/tty获得。运行:phpCli会提示请输入内容!.输入信息test,var_dump($message)会输出test。4.解析命令行选项//这里使用了自定义开关('test'){case'-m':$this->shell='php-m';休息;case'-v':echo$this->command.'1.0.1-dev(cli)';$this->putFormat(true);休息;案例'-h':案例'-help':$this->help();休息;默认值:$this->help();break;}PEAR为Console_Getopt包提供短格式和长格式(GNU风格)选项。默认与PHP绑定安装相同,除非您关闭PEAR。你也可以自己定义。5.良好习惯(推荐)使用信息Exitcode错误信息多以短信息回应-help6.processcontrol/*pcntl_fork--在当前进程的当前位置生成一个分支(子进程)译注:fork创建子进程,父进程和子进程都从fork位置向下继续执行,不同的是在父进程执行的过程中,得到的fork的返回值是子进程号,子进程得到0。*/$pid=pcntl_fork();//父进程和子进程都是进程会执行如下代码if($pid==-1){//错误处理:创建子进程失败返回-1。die('couldnotfork');}elseif($pid){//父进程会得到子进程号,所以这里是父进程执行的逻辑echo'thisisparenttest';pcntl_wait($status);//等待子进程被中断,防止子进程成为僵尸进程。}else{//子进程获取的$pid为0,所以这里是子进程执行的逻辑。echo'thisissontest';}进程概念(自己理解)Forking概念(自己理解)7.简单例子#!/usr/local/bin/php-Cq'dockerps','dsa'=>'dockerps-a'];/**执行shell*@var*/private$shell;/***PHPCli构造函数。*@param$argv*/publicfunction__construct($argv){#基本参数入口文件$this->initFirst=$argv[0];array_shift($argv);$this->initData=$argv;}/**格式化输出*@parambool$end*/privatefunctionputFormat($end=false){print"\n";如果($结束){退出();}}/**使用说明*/privatefunctionhelp(){$this->putFormat();打印'用法:'.$this->命令。'命令'."\n";$this->putFormat();打印“选项:”。“\n”;print'-v显示phpCli版本'。"\n";print'-m显示php模型'。"\n";print'-h显示此帮助'."\n";$this->putFormat();打印“命令:”。“\n”;print'dsRundockercommand`dockerps`'."\n";print'dsaRundockercommand`dockerps-a`'."\n";$this->putFormat();exit();}/**shellrun*@returnmixed*/privatefunctionshell(){if(!$this->shell){exit();}if($this->format){//$status以格式输出system($this->shell,$status);}else{//$status以数组形式返回exec($this->shell,$status);}//通过();return$status;}/***函数入口*/publicfunctionrun(){$label=$this->initData[0]??'';if(empty($label)){$this->help();}if($label[0]=='-'){switch($label){//可以扩展其他短命令case'-m':$this->shell='php-m';休息;case'-v':echo$this->command.'1.0.1-dev(cli)';$this->putFormat(true);休息;案例'-h':案例'-help':$this->help();休息;默认值:$this->help();休息;}}else{if(in_array($label,$this->runCommand)){//可扩展更多shell$this->shell=$this->shellMap[$label];}else{echo"Run'".$this->command."-help'获取命令的更多信息。";$this->putFormat(true);}}$this->shell();}}$phpCli=newPHPCli($argv);$phpCli->run();exit();运行:phpCli运行:phpCli-m运行:phpClidsa感谢阅读!