2010-04-07 7 views
1

J'essaie de créer un script PHP qui prendra un nombre potentiellement infini d'URL de la ligne de commande en tant qu'arguments. Je dois aussi passer un argument qui n'a qu'une seule valeur numérique possible (spécifier délai d'attente), par exemple:Passage d'un nombre potentiellement infini d'arguments à un tableau sauf une seule variable numérique dans un script de ligne de commande PHP

./urltest.php 60 url1.com url2.com url3.com 

Je ne suis pas sûr de savoir comment spécifier argv [1] pour être une seule variable numérique en en même temps, le reste des arguments (c'est-à-dire la liste des URL) va dans un tableau. Peut-être quelque chose comme:

$timeout = $argv[1]; 
$args = func_get_args();  

function numfilter($num) { 
    return !is_numeric($num); 
} 

$urls = array_filters($args, 'numfilter'); 

?

Merci d'avance!

+0

J'ai effectivement écrit une petite bibliothèque PHP pour gérer ce genre de choses. Vous pouvez le trouver sur GitHub [ici] (https://github.com/jordanhalterman/ParParse). Je l'ai utilisé pendant un certain temps et je l'ai trouvé très utile pour ce genre de choses, je n'ai jamais vraiment fait d'effort pour en parler à quelqu'un d'autre. – kuujo

Répondre

2

Je ne pense pas que vous voulez func_get_args. C'est pour obtenir tous les arguments pour la fonction actuelle. Cela n'a rien à voir avec la ligne de commande. Je ferais quelque chose comme

//i don't like altering the global $argv 
$urls = $argv; 

//take off the first element of the array, leaving only urls 
$script = array_shift($argv); //shift off script name, per other post :) 
$timeout = array_shift($urls); 
if(!is_numeric($timeout)) exit ("First argument was not a number") //array_shift always makes me break out perl style, so this however you want 
//your $urls variable now contains an array with arguments 2 - n 
+0

Merci, cela a beaucoup aidé! – reflexiv

1

Assurez-vous de faire deux appels à array_shift, depuis argv [0] sera le nom du script.