2013-06-20 2 views
6

Po uruchomieniu skryptu PHP za pośrednictwem przeglądarki wygląda to mniej więcej takWyślij parametry żądania podczas wywoływania skryptu PHP za pomocą linii poleceń

http://somewebsite.com/yourscript?param1=val1&param2=val2. 

próbuję osiągnąć to samo za pomocą linii poleceń bez konieczności przepisać skrypt akceptujący argv zamiast $_REQUEST. Czy istnieje sposób, aby zrobić coś takiego:

php yourscript.php?param1=val1&param2=val2 

takie, że parametry wysyłane pokazać się w zmiennej $_REQUEST?

Odpowiedz

5

Nie, nie ma łatwego sposobu, aby to osiągnąć. Serwer sieciowy podzieli ciąg żądania i przekaże go do interpretera PHP, który następnie zapisze go w tablicy $_REQUEST.

Jeśli uruchomisz z wiersza poleceń i chcesz zaakceptować podobne parametry, będziesz musiał sam je przeanalizować. Wiersz poleceń ma zupełnie inną składnię do przekazywania parametrów niż HTTP. Możesz zajrzeć do getopt.

Do brutalnej siły, że podejście nie bierze pod uwagę błąd użytkownika, można spróbować tego fragmentu:

<?php 
foreach($argv as $argument) { 
     if($argument == $argv[ 0 ]) continue; 

     $pair = explode("=", $argument); 
     $variableName = substr($pair[ 0 ], 2); 
     $variableValue = $pair[ 1 ]; 
     echo $variableName . " = " . $variableValue . "\n"; 
     // Optionally store the variable in $_REQUEST 
     $_REQUEST[ $variableName ] = $variableValue; 
} 

używać go tak:

$ php test.php --param1=val1 --param2=val2 
param1 = val1 
param2 = val2 
+0

Dzięki, skończyłem robić coś takiego i to działa dobrze. – emilyk

12

W przypadku, gdy nie chcesz zmodyfikować działający skrypt, możesz określić parametry za pomocą parametru -B, aby określić kod uruchamiany przed plikiem wejściowym. Ale w tym przypadku należy również dodać tag -F, aby określić plik wejściowy:

php -B "\$_REQUEST = array('param1' => 'val1', 'param2' => 'val2');" -F yourscript.php 
+1

$ musi zostać zmieniona, w przeciwnym razie twoja powłoka zastąpi $ _REQUEST, prawdopodobnie dla pustego łańcucha i da błąd: Błąd analizy składni PHP: błąd składni, nieoczekiwane '=' w wierszu poleceń wpisz kod w linii 1 – steveayre

+0

Nie działa bez uciekając przed $. To robi: 'php -B" \ $ _ REQUEST = array ('param1' => 'val1', 'param2' => 'val2'); " -F yourscript.php' – Noam

0

Napisałem krótki funkcję do obsługi tej sytuacji - czy argumenty wiersza polecenia są obecne i tablica $ _REQUEST jest pusty (tj kiedy używasz skryptu z linii poleceń zamiast chociaż interfejs WWW), szuka argumentów wiersza poleceń w kluczowych par = wartość,

Argv2Request($argv); 

print_r($_REQUEST); 

function Argv2Request($argv) { 
    /* 
     When $_REQUEST is empty and $argv is defined, 
     interpret $argv[1]...$argv[n] as key => value pairs 
     and load them into the $_REQUEST array 

     This allows the php command line to subsitute for GET/POST values, e.g. 
     php script.php animal=fish color=red number=1 has_car=true has_star=false 
    */ 


    if ($argv !== NULL && sizeof($_REQUEST) == 0) { 
     $argv0 = array_shift($argv); // first arg is different and is not needed 

     foreach ($argv as $pair) { 
      list ($k, $v) = split("=", $pair); 
      $_REQUEST[$k] = $v; 
     } 
    } 
} 

wejście próbka sugerowane w komentarzu danej funkcji jest:

php script.php animal=fish color=red number=1 has_car=true has_star=false 

który daje wynik:

Array 
(
    [animal] => fish 
    [color] => red 
    [number] => 1 
    [has_car] => true 
    [has_star] => false 
) 
1

nie mogę wziąć kredyt na to, ale przyjęty w moim bootstrap pliku:

// Concatenate and parse string into $_REQUEST 
if (php_sapi_name() === 'cli') { 
    parse_str(implode('&', array_slice($argv, 1)), $_REQUEST); 
} 

Przy wykonywaniu pliku PHP z wiersza poleceń:

php yourscript.php param1=val1 param2=val2 

Powyższe wstawi klucze i wartości do $ _REQUEST do późniejszego pobrania.