Maison  >  Article  >  développement back-end  >  Une brève discussion sur la façon d'obtenir les paramètres de ligne de commande en PHP

Une brève discussion sur la façon d'obtenir les paramètres de ligne de commande en PHP

青灯夜游
青灯夜游avant
2021-06-24 19:30:502346parcourir

Dans la ligne de commande PHP CLI, il est nécessaire de fournir des paramètres pour le script de ligne de commande comme GET et POST sur la page web alors comment obtenir ces paramètres de ligne de commande ? L'article suivant vous montrera comment obtenir les paramètres de ligne de commande en PHP et présentera la variable $argv et la fonction getopt().

Une brève discussion sur la façon d'obtenir les paramètres de ligne de commande en PHP

$argv obtient toutes les listes de paramètres séparés par des espaces

Cette variable est probablement une variable de réception de paramètres qui est utilisée 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() Récupère les options de la liste des paramètres de ligne de commande

En fait, c'est une fonction si simple que nous pouvons obtenir la commande spécifiée tout comme les options de commande Linux valeur. 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 au début, et il est à noter que , le premier paramètre est de type chaîne et le deuxième paramètre d'option longue 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 individuels ( Aucune valeur acceptée)
  • Caractère suivi de deux points (valeur obligatoire pour cette option)
  • Caractère suivi de deux deux points (valeur pour cette option facultative)

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 de l'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() Tous le contenu suivant ce paramètre non optionnel ne peut plus être obtenu.

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

Le commentaire a été écrit très clairement. Le troisième paramètre rappellera l'index de la position d'interruption de l'option du paramètre, et cet index est cohérent avec la position d'ordre d'index de $argv.

Résumé

Pour être honnête, avant de lire le document, je savais vraiment seulement qu'il existe une variable $argv qui peut être utilisée pour obtenir les paramètres de la commande script de ligne. Grâce à cet apprentissage, j'ai découvert qu'il existe une fonction de paramètre d'option si puissante. Le processus d'apprentissage est très simple. Comment l'appliquer à des projets réels est la clé. Allez, étudiez dur et entraînez-vous dur !

测试代码:
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