Maison >développement back-end >Problème PHP >Comment obtenir les paramètres de ligne de commande PHP

Comment obtenir les paramètres de ligne de commande PHP

醉折花枝作酒筹
醉折花枝作酒筹avant
2021-05-28 17:55:292320parcourir

Cet article vous présentera comment obtenir les paramètres de ligne de commande PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comment obtenir les paramètres de ligne de commande PHP

Comment obtenir les paramètres de ligne de commande PHP

Les étudiants qui utilisent le développement PHP seront exposés à la ligne de commande CLI. Il existe souvent des tâches planifiées ou des scripts qu'il est plus pratique de traiter directement à l'aide de la ligne de commande. Parfois, nous devons fournir des paramètres pour ces scripts de ligne de commande comme GET et POST sur les pages Web. Par exemple, dans un script qui fait des statistiques sur certaines dates, vous devez lui transmettre une date, afin que nous puissions compter certaines données à la date spécifiée. Ce type d'exigence devrait être très courant, alors comment recevons-nous ces paramètres de ligne de commande ? Aujourd’hui, introduisons cet aspect.

$argv Obtient une liste de tous les paramètres séparés par des espaces

Cette variable est probablement une variable d'accès aux paramètres que tout le monde utilise plus souvent. Il s'agit d'une variable fixe préparée par PHP pour nous permettre d'obtenir le tableau de paramètres transmis au 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
// )

Ce tableau est séparé par des espaces entre les paramètres. Le premier élément est le nom du fichier de script en cours d'exécution. Autrement dit, qu'il y ait ou non des paramètres, cette variable doit avoir un $argv[0] qui représente le nom du fichier de script en cours.

Dans les besoins quotidiens de développement, l'utilisation de cette variable est en fait suffisante. Mais ce n'est évidemment pas notre sujet aujourd'hui. Tout le monde a remarqué que dans le code ci-dessus nous avons de nombreux paramètres sous la forme -x=xxx. Ces paramètres sont-ils très similaires aux options de commande Linux ? Oui, c'est ce sur quoi nous allons nous concentrer ? aujourd'hui : obtenir des options à partir d'une liste d'arguments de ligne de commande.

getopt() Obtient les options de la liste des paramètres de ligne de commande

est en fait une fonction si simple que nous pouvons obtenir la valeur de commande spécifiée, tout comme les options de commande Linux. Et au lieu d'être séparées par des espaces comme $argv, la fonction d'option de commande encapsulera ces options de commande dans un tableau, formant un tableau avec le nom de l'option comme clé et le contenu après le signe égal comme valeur, ce qui est plus pratique pour nous à utiliser.

// 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
// )

N'est-ce pas étonnant et très intuitif ? On obtient directement le contenu de b, c et d sous la forme de tableaux clé-valeur avec un format très clair. Certains étudiants veulent demander : où sont a et e ? Et ccc et ddd à l'arrière ?

La première chose à noter est que ccc et ddd ne sont pas des paramètres d'option standard, c'est-à-dire que le contenu reçu par cette fonction est l'option commençant par -, donc ccc et ddd ne seront pas affichés ici, et vous devez y prêter attention. Malheureusement, les paramètres non optionnels interrompront l'acquisition des paramètres d'option. Si vous continuez à ajouter des options commençant par - après ccc, vous ne pourrez pas les obtenir. Et qu'en est-il des paramètres d'option commençant par -- ? Regardons directement la fonction d'option longue ci-dessous.

Option longue

// 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
// )

Oui, le deuxième paramètre de la fonction getopt() est de définir ce genre d'option longue commençant par --, et il est à noter que le premier paramètre est String type, le deuxième paramètre d’option long est de type tableau. Ensuite, si nous les combinons, nous pouvons bien sûr obtenir toutes les informations sur les paramètres !

// 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, il n'y a aucun problème pour obtenir les options des paramètres. Attention, les étudiants doivent avoir découvert un autre problème. Pourquoi y a-t-il deux points après le nom de l'option défini dans le paramètre de la fonction getopt() ? Cela implique nos règles du côlon, veuillez lire directement ci-dessous.

Règles du côlon

Les deux premiers paramètres de getopt() prennent tous deux en charge un ensemble de règles pour l'acquisition d'options :

  • Caractères uniques (valeur non acceptée )

  • Un caractère suivi de deux points (cette option nécessite une valeur)

  • Un caractère suivi de deux deux points (la valeur de cette option peut sélectionner)

Jetons un coup d'œil directement à travers le 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
// )

Cette section est assez longue, regardons-la pièce par pièce. Le premier est abcdef sans deux-points. Le tableau renvoyé contient des clés mais aucune valeur. Conformément à la règle ci-dessus, les valeurs de ces options de paramètres ne sont pas acceptées. Lorsque vous transmettez ces options de paramètres, elles n'ont que des noms de clés et un contenu vide.

Le deuxième paragraphe définit un paramètre, mais ne donne pas de valeur. A ce moment, le double deux-points :: aura un nom de clé, tandis que le simple deux-points : n'aura rien.

Le troisième paragraphe est la valeur de l'option sous forme d'espaces. Double deux-points : Il y a un nom de clé mais pas de valeur. Simple deux-points : La valeur de la clé est normale.

Le quatrième paragraphe est la valeur de l'option sous la forme du signe égal =. Les deux-points simples et doubles reçoivent normalement la valeur clé.

Interruption du paramètre d'option

Nous avons mentionné le problème d'interruption des paramètres ci-dessus, c'est-à-dire que si un paramètre de paramètre non-option apparaît après le paramètre d'option, getopt() ne pourra plus obtenir ceci Tout après les paramètres non optionnels.

// php 如何获取PHP命令行参数.php -f=22 aa -b=33
// 选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。
// Array
// (
//     [f] => 22
// )

A travers ce test, il apparaît clairement que cette dernière option b ne peut pas être obtenue. A ce stade, si nous voulons savoir où se trouve le paramètre option ou quel paramètre est interrompu, nous pouvons utiliser le troisième paramètre de la fonction 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视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer