2010-07-27 9 views
1

J'ai quelques scripts qui ont besoin des valeurs GET et POST pour démarrer, et je veux les tester sur shell.
Existe-t-il un moyen de transmettre les valeurs à ces tableaux pour éviter d'utiliser la fonction getenv()?PHP: Comment transporter vars de php cmd (en exécutant à partir de shell) à PHP GET et POST Array?

Merci d'avance!

+0

Pourriez-vous élaborer votre question un peu plus s'il vous plaît. – Sarfraz

+0

Il est à noter que HTTP et la ligne de commande diffèrent plus de GET et POST. Dans votre cas, cela peut être pertinent ou non, mais vous devriez en tenir compte. –

+0

La meilleure réponse à ma question venait de 'cletus', et la meilleure solution venait de' umop'! +1 pour les deux et Réponse correcte pour 'umop'. Merci à tous – CuSS

Répondre

2

si votre goa principal Je voudrais simplement tester à partir de la ligne de commande, j'utiliserais la commande wget et j'appellerais simplement votre script avec la chaîne de requête (pour GET) et passerais les données de poste en utilisant le paramètre --post-data=string de wget (pour POST). Si votre objectif est de ne pas utiliser du tout un serveur Web pour effectuer des tests, je vous recommande d'utiliser un wrapper et d'encapsuler votre accès aux données GET et POST afin de pouvoir le tester de toute façon.

2

Ce dont vous avez besoin est un script wrapper qui définit les variables globales et d'environnement pertinentes, puis appelle votre script.

+0

La meilleure réponse à ma question venait de 'cletus', et la meilleure solution venait de' umop'! +1 pour les deux et Réponse correcte pour 'umop'. Merci à tous – CuSS

0

Jetez un oeil à: $_REQUEST

+0

'Remarque: Lors de l'exécution sur la ligne de commande, ceci n'inclura pas les entrées argv et argc; ceux-ci sont présents dans le tableau $ _SERVER. ' merci quand même ... – CuSS

+0

ii m'a échappé :(désolé – RobertPitt

0

En ligne de commande que vous appelez comme

php test.php something1 something2 something3 

et votre test.php est

<?php 
print_r($argv); 
?> 

et la sortie est

Array 
(
    [0] => test.php 
    [1] => something1 
    [2] => something2 
    [3] => something3 
) 
1

Essayez quelque chose comme ceci:

if(php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR'])){ // make sure we're running in CLI 
    $args = $argv; // copy the argv array, we want to keep the original for (possible) future uses 
    array_shift($args); // the $argv[0] is the filename, we don't need it 
    for($i = 0;$i < ($argc - 1);$i++){ 
     list($key, $value) = explode('=', $args[$i]); 
     $_REQUEST[$key] = $value; 
    } 
} 

Bien sûr, plus de fonctionnalités peuvent être ajoutées à l'aide getopts (comme, --get abc = def ghi = JKL --post nom = test passwd = test - cookie ilike = cookie) mais c'est à vous de décider.

+0

+1 pour le code ... n'a pas compris la dernière partie de votre réponse. – CuSS

1
if(php_sapi_name() == 'cli') 
{ 
    associateGetPost(); 
} 

function associateGetPost() 
{ 
    $_GET = $_POST = array(); //Reset 
    foreach($args as $id => $value) 
    { 
     if(substr($value,0,5) == '--get') 
     { 
      $_GET = parse_str(substr($value,5,-1)) 
     }elseif(substr($value,0,6) == '--post') 
     { 
      $_GET = parse_str(substr($value,6,-1)) 
     } 
    } 
} 

Quelque chose dans ce sens.

+0

+1, mais utilisera réponse' umop'. Merci pour l'aide 'RobertPitt' – CuSS