Inscription -

Informations

Cree le 03/05/2010

Modifie le 03/05/2010

Php

# Elfangels

#####

Actions

Participants

Pas de participants

Associations

Pas de dossiers associes

Partager

Share |

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
Webmaster Up - Portfolio - Credits - 2005/../2009
NeoTech Center
ContestOrg Homea NeoCover Perrin's Team Webmaster Up WebProjectHelper