Zwykle, aby przekazać argumenty do skryptu wiersza poleceń, będziesz używać argv
zmiennej globalnej lub getopt :
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$ _GET odnosi się do parametrów metody HTTP GET, które są niedostępne w wierszu poleceń, ponieważ wymagają wypełnienia serwera WWW.
Jeśli i tak naprawdę chcesz wypełnić $ _GET, możesz to zrobić:
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
Możesz także wykonać dany skrypt, wypełnić go $_GET
z linii poleceń, bez konieczności jego modyfikowania:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Pamiętaj, że możesz zrobić to samo z $_POST
i $_COOKIE
.
php [script name] "a=1&b=2&c=3"
nie zapełni pola$_SERVER['QUERY_STRING']
, ale możesz łatwo wpłynąć na to samo, odwołując się$_SERVER['argv'][1]
.getopt()
, to najwyraźniej mówi PHP, że chcesz argumentf
, a nie opcjęf
(która byłaby określona bez dwukropka). Więc to tylko składnia.Z tej odpowiedzi w ServerFault :
Użyj
php-cgi
pliku binarnego zamiast po prostuphp
i przekaż argumenty w wierszu poleceń, na przykład:Który umieszcza to w
$_GET
:Możesz także ustawić zmienne środowiskowe, które zostałyby ustawione przez serwer WWW, na przykład:
źródło
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
Działa dobrze ..Nie mam pliku binarnego php-cgi na Ubuntu, więc zrobiłem to:
źródło
Czasami nie masz możliwości edycji pliku php, aby ustawić $ _GET na przekazane parametry, a czasami nie możesz lub nie chcesz zainstalować php-cgi.
Uważam, że jest to najlepsze rozwiązanie w tym przypadku:
Pozwala to uniknąć zmiany pliku php i umożliwia użycie zwykłego polecenia php. Jeśli masz zainstalowane php-cgi, użyj go, ale to jest kolejna najlepsza rzecz. Uważałem, że warto wspomnieć o tej opcji
-r oznacza uruchomienie kodu php w następującym ciągu. ręcznie ustawiasz tam wartość $ _GET, a następnie odwołujesz się do pliku, który chcesz uruchomić.
Warto zauważyć, że powinieneś uruchomić to w odpowiednim folderze, często, ale nie zawsze, w folderze, w którym znajduje się plik php. Wymaga instrukcji użyje lokalizacji twojego polecenia do rozpoznania względnych adresów URL, a NIE lokalizacji pliku
źródło
Następnie ustaw
$_GET
zmienne w pierwszej linii w PHP, chociaż nie jest to pożądany sposób ustawiania$_GET
zmiennej i możesz napotkać problemy w zależności od tego, co zrobisz później z tą zmienną.zmienne, za pomocą których uruchamiasz skrypt, będą dostępne z
$argv
tablicy w Twojej aplikacji PHP. pierwszy wpis będzie nazwą skryptu, z którego pochodzi, więc możesz zechciećarray_shift($argv)
usunąć ten pierwszy wpis, jeśli chcesz przetworzyć kilka zmiennych. Lub po prostu załaduj do zmiennej lokalnej.źródło
Spróbuj użyć
WGET
:źródło
$_GET
oznacza to działający serwer WWW.- Opcja 1: php-cgi -
Aby uruchomić skrypt, użyj „php-cgi” zamiast „php”. To najprostszy sposób, ponieważ nie będziesz musiał specjalnie modyfikować kodu php, aby z nim pracować:
- Opcja 2: jeśli masz serwer WWW -
Jeśli plik php znajduje się na serwerze WWW, możesz użyć „wget” w wierszu poleceń:
LUB:
- Dostęp do zmiennych w php -
W obu opcji 1 i 2 uzyskujesz dostęp do tych parametrów w następujący sposób:
źródło
Jeśli trzeba przejść
$_GET
,$_REQUEST
,$_POST
, lub cokolwiek innego, co może również skorzystać z trybu interaktywnego PHP:Następnie wpisz:
Spowoduje to ręczne ustawienie dowolnych zmiennych, które chcesz, a następnie uruchomienie pliku php z ustawionymi tymi zmiennymi.
źródło
Jeśli masz możliwość edycji skryptu PHP, możesz sztucznie wypełnić tablicę $ _GET za pomocą następującego kodu na początku skryptu, a następnie wywołać skrypt ze składnią:
php -f script.php name1=value1 name2=value2
źródło
W wierszu poleceń wklej następujące elementy
źródło
Po prostu mijam je w ten sposób:
działa dobrze, tablica $ _GET to:
źródło
php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'
Możesz zrobić pierwszą część jako alias:
alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'
następnie po prostu użyj:
php-get some_script.php 'a=1&b=2&c=3'
źródło
lub po prostu (jeśli masz LYNX):
źródło