Maison  >  Article  >  développement back-end  >  Comment obtenir les paramètres en mode php cli

Comment obtenir les paramètres en mode php cli

jacklove
jackloveoriginal
2018-06-08 23:29:151869parcourir

Il existe deux façons pour PHP de recevoir des paramètres en mode cli

1 Utilisez le tableau argv
2. Utilisez la méthode getopt

1 Utilisez le tableau argv

Par exemple : vous devez exécuter un php et passer trois paramètres (type=news, is_hot=1, limit=5)

Créer test.php

<?phpprint_r($argv);?>
Exécuter sur la ligne de commande

php test.php news 1 5
Sortie :

Array(
    [0] => test.php
    [1] => news
    [2] => 1
    [3] => 5)
Vous pouvez voir que argv[0] est le nom du fichier php actuellement exécuté, et argv[1]~argv[ 3] sont les valeurs des paramètres passés

argv[1] est égal à la valeur du type
argv[2] est égal à la valeur de is_hot
argv[3] est égal au valeur de la limite
De cette façon, les paramètres transmis peuvent être obtenus en fonction du tableau argv pour un traitement ultérieur.

Inconvénients : En utilisant le tableau argv, les paramètres passés peuvent être obtenus dans l'ordre. Mais après l'avoir obtenu, un traitement correspondant doit être effectué. Dans l'exemple ci-dessus, argv[1] doit correspondre au paramètre type, argv[2] correspond au paramètre is_hot et argv[3] correspond au paramètre limit. . Et si les paramètres sont écrits dans le mauvais ordre pendant le processus de transfert, cela entraînera une erreur de programme.

Par exemple :

<?php$param = array();$param[&#39;type&#39;] = $argv[1];$param[&#39;is_hot&#39;] = $argv[2];$param[&#39;limit&#39;] = $argv[3];
print_r($param);?>
Exécution

php test.php news 1 5
Sortie :

Array(
    [type] => news
    [is_hot] => 1
    [limit] => 5)

Les paramètres sont obtenus dans un ordre différent. les valeurs seront différentes, entraînant des erreurs dans les programmes suivants

Exécution

php test.php 1 5 news
Sortie :

Array(
    [type] => 1
    [is_hot] => 5
    [limit] => news
)

Ainsi, lors de l'utilisation du argv tableau pour passer les paramètres, Il faut faire attention à l'ordre de passage des paramètres.

2. Utilisez la méthode getopt

getopt pour obtenir les options de la liste des paramètres de ligne de commande

array getopt ( string $options [, array $longopts ] )

Paramètres :
options Chaque caractère de cette chaîne sera traité comme un caractère d'option. Les options correspondant au script entrant commencent par un seul trait d'union (-). Par exemple, une chaîne d'option « x » identifie une option -x. Seuls a-z, A-Z et 0-9 sont autorisés.

longopts Tableau d'options. Chaque élément de ce tableau sera traité comme une chaîne d'options, correspondant aux options transmises au script avec deux tirets (–). Par exemple, l'élément d'options long "opt" identifie une option -opt.

les options peuvent contenir les éléments suivants : Un seul caractère (n'accepte pas de valeur)
Un caractère suivi de deux points (cette option nécessite une valeur)
Suivi de deux caractères deux-points (la valeur de cette option est facultative) La valeur de l'option
est le premier paramètre après la chaîne. Cela ne me dérange pas s'il y a des espaces avant la valeur.

Les formats d'options et de longopts sont presque les mêmes, la seule différence est que longopts doit être un tableau d'options (chaque élément est une option), tandis que les options ont besoin d'une chaîne (chaque caractère est une option) .


Le séparateur de valeurs peut être un espace ou =. Les valeurs facultatives n'acceptent pas les espaces comme délimiteurs, seul = peut être utilisé comme délimiteurs.

Valeur de retour

Cette fonction renvoie un couple option/paramètre, ou FALSE en cas d'échec.
L'analyse des options se terminera à la première non-option trouvée, tout ce qui suit sera rejeté.

1. Utiliser l'instance d'options

a, b, c sont des valeurs obligatoires

d est une valeur facultative
e n'est pas une valeur acceptée

<?php$param = getopt(&#39;a:b:c:d::e&#39;);
print_r($param);?>
Exécuter

php test.php -a 1 -b 2 -c 3 -d=4 -e 5
Sortie :

Array(
    [a] => 1
    [b] => 2
    [c] => 3
    [d] => 4
    [e] => 
)
2. Utilisez l'instance longopts

type, is_hot est la valeur requise

limit est la valeur facultative
expire Si la valeur

<?php$longopt = array(    &#39;type:&#39;,    &#39;is_hot:&#39;,    &#39;limit::&#39;,    &#39;expire&#39;);$param = getopt(&#39;&#39;, $longopt);
print_r($param);?>
n'est pas acceptée, exécutez

php test.php --type news --is_hot 1 --limit=10 --expire=100
et affichez :

Array(
    [type] => news
    [is_hot] => 1
    [limit] => 10
    [expire] => 
)
3. instances suivantes

<?php$longopt = array(    &#39;type:&#39;,    &#39;is_hot:&#39;,    &#39;limit::&#39;,    &#39;expire&#39;);$param = getopt(&#39;&#39;, $longopt);
print_r($param);?>
Exécution

php test.php --type news --is_hots 1 --limit=10 --expire=100
Sortie :

Array
(
    [type] => news
)
Parce que is_hots n'est pas une valeur d'option (is_hot est défini), tous les paramètres à partir de maintenant sont écartés.


Résumé : Utilisez le tableau argv pour transmettre les paramètres, la méthode est simple et facile à mettre en œuvre. L'ordre des paramètres ne peut pas être erroné et le traitement correspondant doit être effectué une fois les paramètres obtenus.
En utilisant la méthode getopt, vous pouvez utiliser des noms de paramètres, et l'ordre des paramètres peut être arbitraire, ce qui est relativement standardisé. (Recommandé)

Cet article présente la méthode d'obtention des paramètres en mode php cli Pour plus de contenu connexe, veuillez faire attention au site Web php chinois.

Recommandations associées :

Comment obtenir de manière récursive la valeur d'une clé spécifiée dans un tableau via du code PHP

Lecture d'une taille de fichier de 1 Go via PHP

Explication du code de la fonction d'initialisation de la classe 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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn