日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP如何獲取命令行參數

瀏覽:197日期:2022-09-07 14:20:38

使用 PHP 開發的同學多少都會接觸過 CLI 命令行。經常會有一些定時任務或者一些腳本直接使用命令行處理會更加的方便,有些時候我們會需要像網頁的 GET 、 POST 一樣為這些命令行腳本提供參數。比如在針對某些日期做統計的腳本,就需要傳遞一個日期給它,這樣我們就統計指定日期的一些數據。這類需求應該非常常見,那么,我們都是如何來接收這些命令行的參數的呢?今天,就來介紹一下這方面的內容。

$argv 獲得所有空格分隔的參數列表

這個變量估計是大家用得比較多的一個接參變量了。它是 PHP 為我們準備好的一個固定變量,目的就是獲取傳遞給腳本的參數數組。

print_r($argv);// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd // Array// (// [0] => 如何獲取PHP命令行參數.php// [1] => --a=1// [2] => -b=2// [3] => -c=3// [4] => -d=4// [5] => --e=5// [6] => ccc// [7] => ddd// )

這個數組是以參數間隔的空格進行分隔的。第1個元素是當前運行的腳本文件名,也就是說,不管有沒有參數,這個變量一定會有一個 $argv[0] 表示的是當前的腳本文件名。

在日常的開發需求中,其實使用這個變量就已經夠用了。但是這明顯不會是我們今天的主題,大家注意到上面的代碼中我們有很多參數是 -x=xxx 的形式,這種形式的參數是不是和 Linux 的命令選項非常像,沒錯,這就是我們今天要重點介紹的:從命令行參數列表中獲取選項。

getopt() 從命令行參數列表中獲取選項

其實就是這樣一個簡單的函數,我們就可以像 Linux 的命令選項一樣獲取指定的命令值。而且不是像 $argv 按空格進行分隔,命令選項函數會將這些命令選項封裝成數組,組成以選項名為鍵,以等號后面的內容為值的數組,更加方便我們的使用。

// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt(’a:b:c:d:e:f:’));// Array// (// [b] => 2// [c] => 3// [d] => 4// )

是不是很神奇,而且非常直觀吧,我們直接就拿到了 b 、 c 、d 的內容并且是格式非常清晰的鍵值數組形式。有同學要問了,a 和 e 呢?還有后面的 ccc 、 ddd 呢?

首先要說明的是,ccc 和 ddd 不是標準的選項參數,也就是說,這個函數接收的內容是以 - 開頭的選項,所以 ccc 和 ddd 不會在這里輸出,并且需要注意的是,非選項參數會中斷選項參數的獲取,在 ccc 之后如果繼續添加 - 開頭的選項也是無法獲取到的,這個我們后面還會看到。而 -- 開頭的選項參數呢?我們直接看下面的長選項功能。

長選項

// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt(’’, [’a:’,’b:’,’c:’,’d:’,’e:’,’f:’]));// Array// (// [a] => 1// [e] => 5// )

沒錯,getopt() 函數的第二個參數就是定義這種 -- 開頭的長選項的,而且需要注意的是,第一個參數是字符串類型,第二個長選項參數是數組類型的。那么我們把它們結合起來,就當然可以獲取到全部的參數信息啦!

// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt(’a:b:c:d:e:f:’, [’a:’,’b:’,’c:’,’d:’,’e:’,’f:’]));// Array// (// [a] => 1// [b] => 2// [c] => 3// [d] => 4// [e] => 5// )

OK,參數選項獲取沒問題了吧,細心的同學肯定又發現了一個問題,這個 getopt() 函數的參數中定義的選項名稱后面為啥都要加個冒號?這就涉及到我們的冒號規則了,請直接往下看。

冒號規則

getopt() 的前兩個參數都支持一套關于選項獲取的規則:

單獨的字符(不接受值) 后面跟隨冒號的字符(此選項需要值) 后面跟隨兩個冒號的字符(此選項的值可選)

我們還是直接通過代碼來看一下。

// 一// php 如何獲取PHP命令行參數.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd print_r(getopt(’abcdef’));// Array// (// [b] => // [c] => // [d] => // )// 二// php 如何獲取PHP命令行參數.php -fprint_r(getopt(’f::’));// Array// (// [f] => // )print_r(getopt(’f:’));// Array// (// )// 三// php 如何獲取PHP命令行參數.php -f 22print_r(getopt(’f::’));// Array// (// [f] => // )print_r(getopt(’f:’));// Array// (// [f] => 22// )// 四// php 如何獲取PHP命令行參數.php -f=22print_r(getopt(’f::’));// Array// (// [f] => 22// )print_r(getopt(’f:’));// Array// (// [f] => 22// )

這一段比較長,我們一塊一塊來看。首先是不帶冒號的 abcdef 寫法,返回的數組中都包含鍵,但沒有值,對應上面的規則就是不接受這些參數選項的值,你傳了這些參數選項也是只有鍵名而內容是空的。

第二段是定義了一個參數,但是不給值,這時,雙冒號 :: 會有鍵名,而單冒號 : 則什么都沒有。

第三段是空格形式的選項值,雙冒號 :: 有鍵名但沒有值,單冒號 : 鍵值正常。

第四段是等號 = 形式的選項值,單雙冒號都正常接收到鍵值。

選項參數中斷

上文中我們提到過參數中斷的問題,就是在選項參數之后如果有一個非選項參數的參數出現,getopt() 就無法再獲取到這個非選項參數后面的所有內容了。

// php 如何獲取PHP命令行參數.php -f=22 aa -b=33// 選項的解析會終止于找到的第一個非選項,之后的任何東西都會被丟棄。// Array// (// [f] => 22// )

通過這個測試可以清晰的看出后面的 b 選項無法獲取。這時,如果我們想知道選項參數在什么地方或者因為哪個參數而中斷的話,就可以使用 getopt() 函數的第三個參數了。

// php 如何獲取PHP命令行參數.php -f=22 aa -b=33$optind = null;getopt(’f:b:’, [], $optind);echo $optind, PHP_EOL; // 返回中斷位置的索引值,2echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引順序,aa

注釋已經寫得很清晰了,第三個參數會回調一個參數選項中斷位置的索引,并且這個索引是和 $argv 的索引順序位置一致的。

總結

說實話,在沒看文檔前真的只知道有一個 $argv 變量可以用來獲取命令行腳本的參數,通過這次學習才發現原來還有一個這么強大的選項參數函數。學習的過程非常簡單,如何運用到真實的項目中才是關鍵所在,加油學習,努力實踐吧!

測試代碼:

github.com/zhangyue050…

以上就是PHP如何獲取命令行參數的詳細內容,更多關于PHP 獲取命令行參數的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲黑丝一区二区| 国产视频一区二| 国产精久久久| 欧美一区二区三区久久| 日韩在线观看一区二区三区| 蜜臀精品一区二区三区在线观看| 狠狠色综合网| 丝袜美腿一区二区三区| 爽好多水快深点欧美视频| 日韩在线播放一区二区| 蜜臀av一区二区在线免费观看| 免费视频久久| 女人av一区| 亚洲一区日韩| 亚洲免费福利一区| 久久国际精品| 久久精品国产一区二区| 精品美女久久| 99精品在线观看| 美女少妇全过程你懂的久久| 香蕉久久夜色精品国产| 最新国产精品视频| 国产欧美日韩亚洲一区二区三区| 久久精品色播| 99国产精品免费视频观看| 国产午夜精品一区二区三区欧美| 中文字幕一区二区三区四区久久| 视频一区视频二区中文| 国产精品av一区二区| 精品中文一区| 亚洲尤物在线| 亚洲欧洲日韩| 国产精品成人一区二区网站软件| 成人午夜网址| 欧美成人午夜| 免费看精品久久片| 国产精品一区二区美女视频免费看 | 欧美不卡高清| 国产精品99久久免费观看| 国产精品麻豆久久| 97se综合| 少妇精品久久久| 欧美sss在线视频| 91精品美女| 六月丁香综合| 激情综合自拍| 欧美亚洲国产一区| 99热精品久久| 日韩午夜精品| 精品中文在线| 国产色综合网| 欧美日韩视频| 久久精品国产一区二区| 91欧美日韩| 国产精品白丝久久av网站| 日韩一区二区在线免费| 午夜在线一区二区| 精品久久97| 久久超级碰碰| 欧美国产偷国产精品三区| 成人va天堂| 狂野欧美性猛交xxxx| 欧美va天堂| 欧美亚洲国产一区| 国产三级精品三级在线观看国产| 在线国产日韩| 久久精品二区亚洲w码| 丝袜美腿亚洲一区二区图片| 国产韩日影视精品| 欧美一区自拍| 日韩精品dvd| 欧美精品一区二区久久| 麻豆国产欧美日韩综合精品二区| 91精品观看| 成午夜精品一区二区三区软件| 国产精品啊啊啊| 丝袜脚交一区二区| 国产精品毛片视频| www成人在线视频| 中文字幕视频精品一区二区三区| 国产一在线精品一区在线观看| 国产精品久久久久蜜臀 | 欧美va亚洲va日韩∨a综合色| 蜜臀久久久99精品久久久久久| 高清一区二区三区av| 精品一区二区三区在线观看视频 | 国产精品xvideos88| 中文字幕在线免费观看视频| 三级亚洲高清视频| 日韩亚洲精品在线| 国产精品99视频| 亚洲专区在线| 伊人久久高清| 激情综合网站| 激情欧美亚洲| 久久久国产精品一区二区中文| 亚洲欧美日韩在线观看a三区| 国产91在线播放精品| 日韩国产精品久久久久久亚洲| 午夜国产一区二区| 亚洲欧洲高清| 久久99精品久久久野外观看| 亚洲精品激情| 亚洲一区不卡| 狠狠干综合网| 亚洲二区三区不卡| 97欧美在线视频| 美女在线视频一区| 国产欧美日韩一区二区三区四区| 亚洲理论在线| 亚洲免费精品| 最新亚洲激情| av成人国产| 伊人成人在线视频| 在线国产一区二区| 免费成人网www| 免费视频亚洲| 欧美日韩国产高清电影| 久久久久久免费视频| 欧美日韩精品免费观看视完整 | 日韩福利在线观看| 最新国产精品久久久| 久久都是精品| 蜜臀久久99精品久久久久宅男| 欧美日韩亚洲一区二区三区在线| 亚洲网址在线观看| 日韩中文字幕视频网| 日韩av网站在线观看| 国产精品免费不| 精品国产美女a久久9999| 日韩三级视频| 国产欧美在线| 国产精品色在线网站| 国产精品777777在线播放| 国产精品一卡| 亚洲国产福利| 亚洲一区有码| 日韩成人一级| 国产精品伦一区二区| 99久精品视频在线观看视频| 亚洲一区激情| 久久影视三级福利片| 五月综合激情| 日韩二区三区四区| 精品国产精品久久一区免费式| 久久裸体视频| 日韩欧美中文字幕一区二区三区| 国产精品a久久久久| 精品黄色一级片| 欧美一区久久| 99国产精品| 日韩欧美不卡| 桃色av一区二区| 免费不卡中文字幕在线| 亚洲欧美专区| 国产精品调教| 国产成人精品三级高清久久91| www.com.cn成人| 欧美特黄一级| 亚洲精品女人| 国产精品成人一区二区网站软件| 国产91在线播放精品| 欧美丝袜一区| 色婷婷成人网| 91亚洲精品在看在线观看高清| 欧美aaaaaa午夜精品| 亚洲精品国产嫩草在线观看| 亚洲视频播放| 国产精品午夜一区二区三区| 日韩欧美三级| 国产美女一区| 国产日产一区| 亚洲综合电影| 模特精品在线| 亚洲精品视频一二三区| 免费亚洲一区| 999久久久国产精品| 亚洲一区二区三区久久久| 国产激情精品一区二区三区| 国产一区二区三区四区二区| 蜜桃tv一区二区三区| 日韩av三区| 国产 日韩 欧美一区| 亚洲一区二区小说| av资源中文在线| 伊人国产精品| 高清日韩欧美| 美女国产一区| 韩日一区二区| 亚洲专区欧美专区| 国产在线不卡一区二区三区| 亚洲一区二区动漫| 国产一区二区三区视频在线| 免费日韩av| 久久午夜影院| 蜜桃久久久久久久| 97se综合| 国产欧美日韩视频在线 | 91视频一区| 亚洲精品视频一二三区|