久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

PHP如何獲取命令行參數(shù)

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

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

$argv 獲得所有空格分隔的參數(shù)列表

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

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

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

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

getopt() 從命令行參數(shù)列表中獲取選項(xiàng)

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

// php 如何獲取PHP命令行參數(shù).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 的內(nèi)容并且是格式非常清晰的鍵值數(shù)組形式。有同學(xué)要問了,a 和 e 呢?還有后面的 ccc 、 ddd 呢?

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

長選項(xiàng)

// php 如何獲取PHP命令行參數(shù).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() 函數(shù)的第二個參數(shù)就是定義這種 -- 開頭的長選項(xiàng)的,而且需要注意的是,第一個參數(shù)是字符串類型,第二個長選項(xiàng)參數(shù)是數(shù)組類型的。那么我們把它們結(jié)合起來,就當(dāng)然可以獲取到全部的參數(shù)信息啦!

// php 如何獲取PHP命令行參數(shù).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,參數(shù)選項(xiàng)獲取沒問題了吧,細(xì)心的同學(xué)肯定又發(fā)現(xiàn)了一個問題,這個 getopt() 函數(shù)的參數(shù)中定義的選項(xiàng)名稱后面為啥都要加個冒號?這就涉及到我們的冒號規(guī)則了,請直接往下看。

冒號規(guī)則

getopt() 的前兩個參數(shù)都支持一套關(guān)于選項(xiàng)獲取的規(guī)則:

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

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

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

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

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

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

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

選項(xiàng)參數(shù)中斷

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

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

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

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

注釋已經(jīng)寫得很清晰了,第三個參數(shù)會回調(diào)一個參數(shù)選項(xiàng)中斷位置的索引,并且這個索引是和 $argv 的索引順序位置一致的。

總結(jié)

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

測試代碼:

github.com/zhangyue050…

以上就是PHP如何獲取命令行參數(shù)的詳細(xì)內(nèi)容,更多關(guān)于PHP 獲取命令行參數(shù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 中文字幕三区 | 欧美精品在线视频 | 91玖玖| 欧美一区二区三区电影 | 久久精品亚洲精品 | 国产三区精品 | 欧美成人一区二区三区片免费 | 成人性大片免费观看网站 | 黄色国产大片 | 午夜资源| 成人国产在线 | 国产性×xxx盗摄xxxx | 不卡免费在线视频 | 亚洲欧美国产一区二区三区 | 手机看片169 | 91精品久久久久久久久久入口 | 精品在线播放 | 91在线免费观看 | 国产精品成人在线观看 | 日韩毛片免费视频一级特黄 | 日韩欧美在线免费观看 | 国产一区二区久久 | 欧洲精品在线视频 | 色黄视频在线看 | 91精品国产乱码久久久久久久久 | 日韩成人在线观看 | 精品国精品国产自在久不卡 | 91社区在线观看 | 一级a性色生活片久久毛片明星 | 免费h| 日韩欧美在线视频 | 色婷婷综合久久久中文字幕 | 中文字幕二区 | 不卡一二 | 精品不卡 | 国产伦精品一区二区三区四区视频 | 久久精品视 | 午夜私人视频 | 欧美日韩亚洲一区二区 | 亚洲欧美在线视频 | 伊人色综合久久天天五月婷 |