


A brief discussion on how to obtain command line parameters in PHP
In the PHP CLI command line, it is necessary to provide parameters for the command line script like GET and POST on the web page; so how to obtain these command line parameters? The following article will show you how to obtain command line parameters in PHP, and introduce the $argv variable and getopt() function.
$argv Gets a list of all space-separated parameters
This variable is probably an access parameter variable that everyone uses more often. . It is a fixed variable prepared by PHP for us to obtain the parameter array passed to the script.
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 // )
This array is separated by spaces between parameters. The first element is the name of the currently running script file. That is to say, regardless of whether there are parameters or not, this variable must have an $argv[0] representing the current script file name.
In daily development needs, it is actually enough to use this variable. But this is obviously not our topic today. Everyone noticed that in the above code we have many parameters in the form of -x=xxx. Are parameters in this form very similar to Linux command options? Yes, this is What we’re going to focus on today: getting options from a command line argument list.
getopt() Gets options from the command line parameter list
In fact, it is such a simple function, we can get the specified command just like Linux command options value. And instead of being separated by spaces like $argv, the command option function will encapsulate these command options into an array, forming an array with the option name as the key and the content after the equal sign as the value, which is more convenient for us to use.
// 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 // )
Isn’t it amazing and very intuitive? We directly got the contents of b, c, and d in the form of key-value arrays with a very clear format. Some students want to ask, where are a and e? What about ccc and ddd at the back?
The first thing to note is that ccc and ddd are not standard option parameters. That is to say, the content received by this function is the option starting with -, so ccc and ddd will not be output here, and you need to pay attention to it. Unfortunately, non-option parameters will interrupt the acquisition of option parameters. If you continue to add options starting with - after ccc, you will not be able to obtain them. We will see this later. And what about the option parameters starting with --? Let’s look directly at the long option function below.
Long option
// 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 // )
Yes, the second parameter of the getopt() function is to define this kind of long option at the beginning, and it should be noted that , the first parameter is of string type, and the second long option parameter is of array type. Then if we combine them, of course we can get all the parameter information!
// 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, there is no problem in getting the parameter options. Careful students must have discovered another problem. Why is there a colon after the option name defined in the parameter of the getopt() function? This involves our colon rules, please read directly below.
Colon rules
The first two parameters of getopt() support a set of rules for option acquisition:
- Individual characters (No values accepted)
- Characters followed by a colon (value required for this option)
- Characters followed by two colons (value for this option optional)
Let’s take a look directly through the code.
// 一 // 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 // )
This paragraph is relatively long, let’s look at it piece by piece. The first is abcdef without colon. The returned array contains keys but no values. Corresponding to the above rules, the values of these parameter options are not accepted. When you pass these parameter options, they only have key names and empty content.
The second paragraph defines a parameter but does not give a value. At this time, the double colon :: will have a key name, while the single colon : will have nothing.
The third paragraph is the option value in the form of spaces. Double colon:: There is a key name but no value. Single colon: The key value is normal.
The fourth paragraph is the option value in the form of equal sign =. Both single and double colons receive the key value normally.
Option parameter interruption
We mentioned the problem of parameter interruption above, that is, if a non-option parameter parameter appears after the option parameter, getopt() All content following this non-option parameter can no longer be obtained.
// php 如何获取PHP命令行参数.php -f=22 aa -b=33 // 选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。 // Array // ( // [f] => 22 // )
Through this test, it can be clearly seen that the following b option cannot be obtained. At this time, if we want to know where the option parameter is or which parameter is interrupted, we can use the third parameter of the getopt() function.
// 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
The comment has been written very clearly. The third parameter will call back the index of the parameter option interruption position, and this index is consistent with the index sequence position of $argv.
Summary
To be honest, before reading the document, I really only knew that there is an $argv variable that can be used to obtain the parameters of the command line script. Through this study Only then did I discover that there is such a powerful option parameter function. The learning process is very simple. How to apply it to real projects is the key. Come on, study hard and practice hard!
测试代码: 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视频教程》
The above is the detailed content of A brief discussion on how to obtain command line parameters in PHP. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Working with database in CakePHP is very easy. We will understand the CRUD (Create, Read, Update, Delete) operations in this chapter.

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Validator can be created by adding the following two lines in the controller.

Logging in CakePHP is a very easy task. You just have to use one function. You can log errors, exceptions, user activities, action taken by users, for any background process like cronjob. Logging data in CakePHP is easy. The log() function is provide

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c
