Informations
Cree le 03/05/2010
Modifie le 03/05/2010
Php




Actions
Participants
Pas de participants
Associations
Pas de dossiers associes
Partager
Récupérer les paramètres envoyés via le terminal
Vous le savez déjà surement mais il est possible d'utiliser php en ligne de commande. Voici une petite fonction qui s'avère bien utiliser pour récupérer les paramètres envoyés via le terminal.
/**
* Récupérer les paramètres envoyés via le terminal
* @param $required array tableau des paramètres obligatoires
* @param $optionnal array tableau des paramètres optionnels
* @param $start int nombre de paramètres à ne pas prendre en compte depuis le début
* @param $end int nombre de paramètres à ne pas prendre en compte depuis la fin
* @param $help string|array paramètre attendu pour affiche l'aide (mettre NULL pour desactiver l'aide)
* @return array paramètres
*/
function params($required,$optional=array(),$start=0,$end=0,$help=array('h','help')) {
// Parametres attendus
$params_exp = array();
foreach(array_merge($required,$optional) as $key => $param) {
if(is_array($param)) {
foreach($param as $param_2) {
$params_exp[strtolower($param_2)] = $key;
}
} else {
$params_exp[strtolower($param)] = $key;
}
}
// Retirer les parametres inutiles
if($end == 0) { $params_used = array_slice($_SERVER['argv'],$start+1); }
else { $params_used = array_slice($_SERVER['argv'],$start+1,-$end); }
// Récuperer les valeurs associees aux clefs
$params_in = array(); $last_key = NULL;
for($i=0;isset($params_used[$i]);$i++) {
// Est ce qu'il s'agit d'une clef ?
if(preg_match('/-{1,2}(.*)/',$params_used[$i],$matches)) {
// Récupérer la clef
$key = strtolower($matches[1]);
// Aide
if($help != NULL && (!is_array($help) && $key == $key || is_array($help) && in_array($key,$help))) {
$params = '';
foreach($required as $key => $param) {
$params .= '-';
if(is_array($param)) { $params .= implode('/',$param); }
else { $params .= $param; }
$params .= ' value ';
}
foreach($optional as $key => $param) {
$params .= '[-';
if(is_array($param)) { $params .= implode('/',$param); }
else { $params .= $param; }
$params .= ' value] ';
}
die('Usage : '.$_SERVER['argv'][0].' '.$params."\n" );
}
// Clef attendue ?
if(!isset($params_exp[$key])) { throw new Exception('Le parametre "'.$key.'" n\'est pas attendu'); }
// Clef déjà présente ?
if(isset($params_in[$key])) { throw new Exception('La clef "'.$key.'" designe plusieurs parametres'); }
// La dernière clef correspond à une valeur égale à true
if($last_key != NULL) { $params_in[$last_key] = true; }
// Enregistrer la clef
$last_key = $key;
} else {
// Clef donnée ?
if($last_key == NULL) { throw new Exception('Un parametre doit etre compose d\'une clef et de sa valeur'); }
// Enregistrer la valeur
$params_in[$key] = $params_used[$i];
// Effacer la clef
$last_key = NULL;
}
}
// La dernière clef correspond à une valeur égale à true
if($last_key != NULL) { $params_in[$last_key] = true; }
// Faire correspondre les parametres attendus aux parametres donnes
$params_out = array_fill(0,count(array_merge($required,$optional)),NULL);
foreach($params_in as $key => $value) {
$params_out[$params_exp[$key]] = $value;
}
// Vérifier la présence des parametres obligatoires
for($i=0;$i<count($required);$i++) {
if($params_out[$i] === NULL) {
throw new Exception('Le parametre "'.
(is_array($required[$i]) ? array_shift($required[$i]) : $required[$i]).
'" est obligatoire');
}
}
// Retourner la liste des parametres
return $params_out;
}
Exemple d'utilisation :
// Récupérer les parametres
try {
list($source,$destination,$height,$width) = params(array(array('s','source'),array('d','dest')),array('h','w'));
} catch(Exception $e) {
die('Erreur au niveau des parametres : '.$e->getMessage()."\n" );
}
Commentaires
Pas encore de commentaires
Tutoriaux
Services
Ressources
Forum
Partenaires

