gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

淺談PHP中獲取命令行參數的方法

在PHP CLI 命令行中,有需要像網頁的 GET 、 POST 一樣為命令行腳本提供參數;那么如何獲取這些命令行的參數呢?下面本篇文章就來帶大家了解一下PHP中獲取命令行參數的方法,介紹一下$argv變量和getopt()函數。

淺談PHP中獲取命令行參數的方法

$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 -f print_r(getopt('f::')); // Array // ( //     [f] =>  // ) print_r(getopt('f:')); // Array // ( // )  // 三 // php 如何獲取PHP命令行參數.php -f 22 print_r(getopt('f::')); // Array // ( //     [f] =>  // ) print_r(getopt('f:')); // Array // ( //     [f] => 22 // )  // 四 // php 如何獲取PHP命令行參數.php -f=22 print_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; // 返回中斷位置的索引值,2 echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引順序,aa

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

總結

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

測試代碼: https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php

推薦學習:《PHP視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
欧美女人性生活视频| 久久综合亚洲精品| 久久久久人妻精品一区三寸| 好吊妞无缓冲视频观看| 2022中文字幕| 国产九色porny| 欧美 国产 日本| 天天干天天玩天天操| 欧美专区第二页| 日韩日韩日韩日韩日韩| 一女被多男玩喷潮视频| 日本999视频| 老司机午夜免费福利视频| 超碰人人爱人人| 虎白女粉嫩尤物福利视频| 中国一级黄色录像| 国产aaa一级片| 2021狠狠干| 美女在线视频一区二区| 日本午夜激情视频| 九九九九九伊人| 国产xxxxx视频| 国产在线观看欧美| 中文字幕线观看| 五月婷婷深爱五月| 欧美黑人经典片免费观看| 美女在线免费视频| 亚洲一区二区图片| 一级做a免费视频| 91人人澡人人爽人人精品| 1024av视频| www.com毛片| 妺妺窝人体色777777| 中文 日韩 欧美| xxww在线观看| 国产成人美女视频| 亚洲一区在线不卡| 婷婷无套内射影院| avav在线播放| 国产乱淫av片杨贵妃| 两性午夜免费视频| 久久最新免费视频| 美女扒开大腿让男人桶| 黄色大片在线免费看| 国产一区二区在线视频播放| 国产原创精品在线| 91丝袜超薄交口足| 人人妻人人澡人人爽欧美一区双| 久久精品视频16| 国产一区二区视频免费在线观看 | 污污视频在线免费| 欧美中文字幕在线观看视频| 日韩欧美一区二| 在线能看的av网站| 大西瓜av在线| 美女网站免费观看视频| 国产免费xxx| 欧美一级裸体视频| 97超碰在线人人| 毛片毛片毛片毛片毛| 国产精品又粗又长| 国产又爽又黄ai换脸| 久久国产成人精品国产成人亚洲 | 少妇性l交大片| www..com日韩| 日韩免费在线观看av| 男女av免费观看| 自慰无码一区二区三区| 可以在线看黄的网站| av污在线观看| 欧美视频在线播放一区| 久久精品在线免费视频| 久久av秘一区二区三区| 国产超级av在线| 欧美在线观看成人| 日韩精品 欧美| 免费一级特黄毛片| 成人黄色av片| 免费大片在线观看| 农村妇女精品一二区| 国产亚洲天堂网| 免费无码国产v片在线观看| 搞av.com| 久久精品一区二| 午夜视频在线网站| 国产在线拍揄自揄拍无码| 国产女同无遮挡互慰高潮91| 在线一区二区不卡| 欧美亚洲黄色片| www.在线观看av| 日韩一级特黄毛片| 日本xxx免费| 99视频在线免费| 天天色综合天天色| 日本一区二区三区四区五区六区| 香蕉视频色在线观看| 日韩在线一级片| 欧美日韩精品区别| 男人操女人免费软件| 999精品视频在线| 337p亚洲精品色噜噜狠狠p| 黄色高清无遮挡| 野外做受又硬又粗又大视频√| 免费看又黄又无码的网站| 女人另类性混交zo| 色91精品久久久久久久久| 日本黄网站色大片免费观看| 永久免费在线看片视频| 三级一区二区三区| 免费高清在线观看免费| 成人在线观看a| 亚洲中文字幕无码专区| 伊人精品视频在线观看| 青青草原国产在线视频| 亚洲欧美天堂在线| 免费看黄色一级大片| 97国产在线播放| 成人av在线播放观看| 精品一区二区三区无码视频| 国产欧美日韩网站| 自慰无码一区二区三区| 日韩精品在线中文字幕| 欧美成人乱码一二三四区免费| caopor在线视频| 久久久久人妻精品一区三寸| 香港日本韩国三级网站| 中国黄色片一级| 欧美大片久久久| 亚洲精品蜜桃久久久久久| 欧美日韩不卡在线视频| 六月婷婷激情综合| 久久国产精品网| 91视频 -- 69xx| 992kp免费看片| 国产精品免费入口| 91欧美一区二区三区| 99热一区二区三区| 搞av.com| 国产美女视频免费看| 99久久久无码国产精品6| 三日本三级少妇三级99| 成人黄色片视频| 免费成人进口网站| 国产成人精品视频ⅴa片软件竹菊| 欧美精品久久久久久久久25p| 久久久福利影院| 欧美综合在线播放| 91免费网站视频| 午夜剧场高清版免费观看| 鲁一鲁一鲁一鲁一色| 国产又粗又大又爽的视频| 中文字幕第100页| 黄色成人在线看| 日本aa在线观看| 91香蕉国产线在线观看| 日本a级片免费观看| 农民人伦一区二区三区| koreanbj精品视频一区| 免费欧美一级视频| 久色视频在线播放| www.欧美日本| 人妻无码视频一区二区三区| 999香蕉视频| www.四虎成人| 亚洲老女人av| 一起操在线视频| 交换做爰国语对白| 欧美深夜福利视频| 国产视频一区二区三区在线播放 | 黄频视频在线观看| 中国一级黄色录像| 天天夜碰日日摸日日澡性色av| 日韩人妻无码精品久久久不卡| 亚洲综合伊人久久| 欧美h视频在线观看| aa在线观看视频| 三上悠亚在线一区| 午夜精品久久久久久久无码| 欧美成年人视频在线观看| 亚洲小视频在线播放| 久久精品视频91| aaa毛片在线观看| 成人一区二区av| 日韩不卡一二三| www一区二区www免费| 国内少妇毛片视频| 男人添女人下面免费视频| 欧美视频在线免费播放| 91免费视频黄| 一区二区三区一级片| caopor在线视频| 男人揉女人奶房视频60分| 两根大肉大捧一进一出好爽视频| 三级黄色片免费观看| 欧美女同在线观看| 午夜xxxxx| 欧美爱爱视频网站| 国产传媒免费观看| 能在线观看的av| 视频二区在线播放|