Parsing des arguments de la ligne de commande

Description

Le php a plusieurs fonctions :
Il peut être utilisé sur un serveur web pour faire des pages dynamiques,
Il peut être utilisé pour créer des applications complètes en phpgtk par exemples, (applications graphiques...)
Il peut être utilisé pour créer des lignes de commandes simples...
Larry Wall a dit que perl était partout, php étant le fils de perl, il en va de même pour le php...
On peut tout faire en php, ma source aide les gens qui font des lignes de commandes : une ligne de commande peut souvent prendre différents arguments : des modes et des variables a valeurs :
on peut mettre des modes comme -i -Wall -9...
et des variables : src=monfichier Out=/dev/null
et donc, grace à un peu de parsing, on peut récupérer la valeur mise dans src et dans Out...
Mon script dstingue les arguments des modes (variables et options...)

Source / Exemple :


#!/usr/bin/php
<?php
/*
Comment parser une ligne de commande : ces fonctions existent en perl,
et j'ai eu l'idée de les refaire en php

exemple de ligne de commande :

$ ./console_arguments.php src=monfichier.rpm -Wall
ligne de commande : ./console_arguments.php src=monfichier.rpm -Wall
ligne d'arguements :  src=monfichier.rpm -Wall
Mode -Wall activé !
src==monfichier.rpm
$

  • /
//cette fonction dit si une option est activée ( -Wall par exemple ) function is_mode($opt, $args){ foreach ($args as $a=>$b) if ($b['option']==$opt) return true; return false; } //cette fonction renvoi la valeur associée à une variable. function getvar($var, $args){ foreach ($args as $a=>$b) if ($b['var']==$var) return $b['val']; return false; } //on déclare les variables argc et argv : argc corespond au nombre d'arguments //et argv aux arguments passés au script. $_ARGC=$_SERVER['argc']; $_ARGV=$_SERVER['argv']; //on déclare la ligne de commande $ligne=implode(' ', $_ARGV); //on déclare la ligne d'arguments $ligne_arguments=$_ARGV; $ligne_arguments[0]=''; $ligne_arguments=implode(' ', $ligne_arguments); //on cré le tableau d'arguments $_ARGS=array(); list($a, $b)=each($_ARGV); while (list($a, $b)=each($_ARGV)){ $val=false; $var=false; if ($b{0}==='-') $option=$b; else $option=false; if ($pos=strpos($b, '=')){ $var=substr($b, 0, $pos); $val=substr($b, $pos); } //on rempli le tableau $_ARGS[]=array('pos'=>$a, 'content'=>$b, 'val'=>$val, 'var'=>$var, 'option'=>$option, $var=>$val); } echo 'ligne de commande : ', $ligne, ' ligne d\'arguements : ', $ligne_arguments, ' '; if (($a=is_mode('-Wall', $_ARGS))!==false) echo 'Mode -Wall activé ! '; if (($a=getvar('src', $_ARGS))!==false) echo 'src=', $a, ' '; ?>

Conclusion :


ne me demandez pas un apperçu en ligne ^^

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.