Как правило, для передачи аргументов сценарию командной строки вы будете использовать либо argv
глобальную переменную, либо 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 относится к параметрам метода HTTP GET, которые недоступны в командной строке, поскольку для их заполнения требуется веб-сервер.
Если вы все равно действительно хотите заполнить $ _GET, вы можете сделать это:
// 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
)
*/
Вы также можете выполнить данный сценарий, заполнить его $_GET
из командной строки, не изменяя указанный сценарий:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
Обратите внимание, что вы можете сделать то же самое с $_POST
и $_COOKIE
.
php [script name] "a=1&b=2&c=3"
не будет заполняться$_SERVER['QUERY_STRING']
, но вы можете легко повлиять на то же самое, указав$_SERVER['argv'][1]
.getopt()
, это, по-видимому, говорит PHP, что вам нужен аргументf
, а не опцияf
(которая будет указана без двоеточия). Так что это просто синтаксис.Из этого ответа на ServerFault :
Используйте
php-cgi
двоичный файл вместо простоphp
и передайте аргументы в командной строке, например:Что помещает это в
$_GET
:Вы также можете установить переменные среды, которые будут установлены веб-сервером, например:
источник
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
Работает хорошо ..У меня нет двоичного файла php-cgi в Ubuntu, поэтому я сделал следующее:
источник
Иногда у вас нет возможности отредактировать файл php, чтобы установить $ _GET на переданные параметры, а иногда вы не можете или не хотите устанавливать php-cgi.
Я считаю, что это лучшее решение для этого случая:
Это позволяет избежать изменения вашего файла php и позволяет использовать простую команду php. Если у вас установлен php-cgi, обязательно используйте его, но это лучший вариант. Думал, что этот вариант заслуживает упоминания
-r означает запуск php-кода в следующей строке. вы устанавливаете здесь значение $ _GET вручную, а затем ссылаетесь на файл, который хотите запустить.
Стоит отметить, что вы должны запускать это в правильной папке, часто, но не всегда, в папке, в которой находится php-файл. Операторы Requires будут использовать местоположение вашей команды для разрешения относительных URL-адресов, а НЕ местоположение файла.
источник
Затем установите
$_GET
переменные в первой строке PHP, хотя это нежелательный способ установки$_GET
переменной, и вы можете столкнуться с проблемами в зависимости от того, что вы делаете позже с этой переменной.переменные, с которыми вы запускаете скрипт, будут доступны из
$argv
массива в вашем приложении PHP. первая запись будет именем сценария, из которого они произошли, поэтому вы можете сделать это,array_shift($argv)
чтобы удалить эту первую запись, если вы хотите обработать кучу переменных. Или просто загрузите в локальную переменную.источник
Попробуйте использовать
WGET
:источник
$_GET
подразумевает работающий веб-сервер.- Вариант 1: php-cgi -
Используйте php-cgi вместо php для запуска вашего скрипта. Это самый простой способ, так как вам не нужно специально модифицировать свой php-код для работы с ним:
- Вариант 2: если у вас есть веб-сервер -
Если файл php находится на веб-сервере, вы можете использовать wget в командной строке:
ИЛИ:
- Доступ к переменным в php -
В обоих вариантах 1 и 2 вы получаете доступ к этим параметрам следующим образом:
источник
Если вам нужно пройти
$_GET
,$_REQUEST
,$_POST
или что - нибудь еще вы можете также использовать PHP в интерактивном режиме:Затем введите:
Это вручную установит любые переменные, которые вы хотите, а затем запустит ваш php-файл с этими установленными переменными.
источник
Если у вас есть возможность редактировать PHP-скрипт, вы можете искусственно заполнить массив $ _GET, используя следующий код в начале скрипта, а затем вызвать скрипт с синтаксисом:
php -f script.php name1=value1 name2=value2
источник
В командной строке вставьте следующее
источник
Я просто передаю их так:
работает нормально, массив $ _GET:
источник
php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'
Вы можете сделать первую часть псевдонимом:
alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'
тогда просто используйте:
php-get some_script.php 'a=1&b=2&c=3'
источник
или просто (если у вас LYNX):
источник