成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

php shell 編程

CrazyCodes / 1861人閱讀

摘要:譯注是創(chuàng)建了一個(gè)子進(jìn)程,父進(jìn)程和子進(jìn)程都從的位置開(kāi)始向下繼續(xù)執(zhí)行,不同的是父進(jìn)程執(zhí)行過(guò)程中,得到的返回值為子進(jìn)程號(hào),而子進(jìn)程得到的是。子進(jìn)程得到的為所以這里是子進(jìn)程執(zhí)行的邏輯。

說(shuō)明
腳本文件為:     phpCli
linux文件路徑: /usr/local/bin/phpCli (需要可執(zhí)行權(quán)限 chmod +x phpCli)
linux執(zhí)行:     phpCli
window執(zhí)行:    php phpCli 
1.hash-bang 聲明
  #!/usr/local/bin/php -Cq

針對(duì) linux 使用聲明,將腳本放置 linux 系統(tǒng) 默認(rèn)shell執(zhí)行位置 /usr/local/bin

文件名(一般無(wú)后綴)就是命令名稱 phpCli 對(duì)應(yīng)執(zhí)行命令為 /usr/local/bin/php -Cq /usr/local/bin/phpCli 參數(shù)

腳本操作比較大時(shí)建議 用后即焚 (關(guān)閉文件操作符,清空數(shù)組,關(guān)閉連接等)

2.基本參數(shù)
var_dump($argv);
/*array(2) {
    [0]=>
    string(6) "phpCli"
    [1]=>
    string(4) "test"
}*/

運(yùn)行:phpCli test ;
cli 模式下,參數(shù)會(huì)保存在$argv中.

3.用戶輸入
print "please input something !"."
";
$message = trim(fgets(STDIN));
var_dump($message);
//test

標(biāo)準(zhǔn)輸入在 PHP流的 STDIN 中,或者 unix風(fēng)格的 "終端輸入" 設(shè)備 /dev/tty 中獲得.
運(yùn)行:phpCli 會(huì)得到提示語(yǔ) please input something ! .
輸入信息 test ,var_dump($message)會(huì)輸出 test .

4.解析命令行選項(xiàng)
//這里使用了自定義
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包可以同時(shí)支付簡(jiǎn)短和長(zhǎng)格式(GNU風(fēng)格)的選項(xiàng).
默認(rèn)是與PHP綁定安裝的,除非你關(guān)閉了PEAR .
也可以自行定義 .

5.良好的習(xí)慣(建議)

使用信息

退出代碼

錯(cuò)誤信息

大多數(shù)都是用 一個(gè)簡(jiǎn)短信息來(lái)響應(yīng) -h | -help

6.進(jìn)程控制
/*pcntl_fork — 在當(dāng)前進(jìn)程當(dāng)前位置產(chǎn)生分支(子進(jìn)程)。
譯注:fork是創(chuàng)建了一個(gè)子進(jìn)程,父進(jìn)程和子進(jìn)程 都從fork的位置開(kāi)始向下繼續(xù)執(zhí)行,
不同的是父進(jìn)程執(zhí)行過(guò)程中,得到的fork返回值為子進(jìn)程 號(hào),而子進(jìn)程得到的是0。 */

$pid = pcntl_fork();
//父進(jìn)程和子進(jìn)程都會(huì)執(zhí)行下面代碼
if ($pid == -1) {
    //錯(cuò)誤處理:創(chuàng)建子進(jìn)程失敗時(shí)返回-1.
    die("could not fork");
} else if ($pid) {
    //父進(jìn)程會(huì)得到子進(jìn)程號(hào),所以這里是父進(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.簡(jiǎn)單例子
#!/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();
    }
}

/*
 * 使用說(shuō)明
 */
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運(yùn)行
 * @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)
        {
            //可擴(kuò)展其它短命令
            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)) {
            //可擴(kuò)展更多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();

運(yùn)行: phpCli

運(yùn)行: phpCli -m

運(yùn)行:phpCli dsa

感謝閱讀!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/31642.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門新的編程語(yǔ)言吧!

    摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門新的編程語(yǔ)言吧!

    摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    nihao 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門新的編程語(yǔ)言吧!

    摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    Drummor 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<