Parsing des arguments de la ligne de commande

Soyez le premier à donner votre avis sur cette source.

Vue 15 210 fois - Téléchargée 217 fois

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

Ajouter un commentaire Commentaires
Messages postés
140
Date d'inscription
jeudi 2 mai 2002
Statut
Membre
Dernière intervention
2 février 2010

Salut,

j'ai une petite question qui n'est pas en rapport direct avec ton code, mais comme tu semble maitriser la chose...

Je suis en train de créer un script qui va faire un énorme traitement (plusieurs million de lignes à traiter sur différentes base MySQL...bref...)
Ce script qui va etre lancé en ligne de commande (histoire de ne pas avoir de timeout) bah mettre un paquet de temps à s'executer et j'aimerai bien avoir un truc qui me permete de savoir qu'il est encore en vie et ou il en est...un peu de log d'execution quoi...
Je peux bien sur faire de simple écho, mais perso j'aimerai bien me faire un p'tit compteur d'execution genre "Traitement de la table machin....2343 / 884332") mais j'ai pas trop envie d'écrire une ligne sur le prompt à chaque fois, donc j'aimerai changer en live mon dernier echo pour changer la valeur et donner l'impression d'un incrément (un peu quand tu fait un téléchargeemtn avec wget par exemple)...sauf que je ne sais pas comment faire ca....doit falloir toucher au buffer de sorti standard ou un truc dans le genre, mais je ne sais pas comment faire...

voila, bah si t'as des infos, merci ^^
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
ça c'est pas que pour le gtk... c'est pour la ligne de commande en général...
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Il n'y a bien que toi qui "t'amuse" avec le GTK :)
Faudrait que je regarde de plus près, ca peut etre passionnant comme truc !

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.