Подтвердить что ты не робот

PHP, передающий $_GET в командной строке linux

Скажем, мы обычно получаем доступ через

http://localhost/index.php?a=1&b=2&c=3

Как мы выполняем то же самое в командной строке linux?

php -e index.php

Но как насчет передачи переменных $_GET? Может быть, что-то вроде php -e index.php --a 1 -b 2 -c 3? Сомневаюсь, что это сработает.

Спасибо!

4b9b3361

Ответ 1

Как правило, для передачи аргументов в командной строке script используется либо глобальная переменная 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
     )
*/

Вы также можете выполнить заданный script, заполнить $_GET из командной строки, не изменяя указанный script:

export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'

Обратите внимание, что вы можете сделать то же самое с $_POST и $_COOKIE.

Ответ 2

Из этого ответьте на ServerFault:

Используйте двоичный код php-cgi вместо php и передайте аргументы в командной строке, например:

php-cgi -f index.php left=1058 right=1067 class=A language=English

Что помещает это в $_GET:

Array
(
    [left] => 1058
    [right] => 1067
    [class] => A
    [language] => English
)

Вы также можете установить переменные среды, которые будут установлены веб-сервером, например:

REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English

Ответ 3

У меня нет двоичного файла php-cgi на Ubuntu, поэтому я сделал это:

% alias php-cgi="php -r '"'parse_str(implode("&", array_slice($argv, 2)), $_GET); include($argv[1]);'"' --"
% php-cgi test1.php foo=123
<html>
You set foo to 123.
</html>

%cat test1.php
<html>You set foo to <?php print $_GET['foo']?>.</html>

Ответ 4

php file_name.php var1 var2 varN

Затем установите переменные $_GET в первой строке в PHP, хотя это нежелательный способ установки переменной $_GET и у вас могут возникнуть проблемы в зависимости от того, что вы будете делать позже с этой переменной.

if (isset($argv[1])) {
   $_GET['variable_name'] = $argv[1];
}

переменные, с которыми вы запускаете скрипт, будут доступны из массива $argv в вашем приложении PHP. первой записью будет имя сценария, из которого они вышли, поэтому вы можете захотеть сделать array_shift($argv) чтобы отбросить эту первую запись, если вы хотите обработать несколько переменных. Или просто загрузить в локальную переменную.

Ответ 5

Попробуйте использовать WGET:

WGET 'http://localhost/index.php?a=1&b=2&c=3'

Ответ 6

Иногда у вас нет возможности редактировать файл php для установки $_GET для переданных параметров, а иногда вы не можете или не хотите устанавливать php-cgi.

Я нашел, что это лучшее решение для этого случая:

php -r '$_GET["key"]="value"; require_once("script.php"); 

Это позволяет избежать изменения вашего php файла и позволяет использовать команду plain php. Если у вас установлен php-cgi, обязательно используйте это, но это самое лучшее. Думал, что этот вариант заслуживает упоминания

-r означает запуск php-кода в следующей строке. вы вручную устанавливаете значение $_GET, а затем ссылаетесь на файл, который хотите запустить.

Стоит отметить, что вы должны запустить это в правой папке, часто, но не всегда в папке, в которой находится php файл. Требуется, чтобы инструкции использовали местоположение вашей команды для разрешения относительных URL-адресов, а не расположение файла

Ответ 7

- Вариант 1: php-cgi -

Используйте "php-cgi" вместо "php" для запуска script. Это самый простой способ, поскольку вам не нужно специально модифицировать ваш PHP-код для работы с ним:

php-cgi -f /my/script/file.php a=1 b=2 c=3

- Вариант 2: если у вас есть веб-сервер -

Если файл php находится на веб-сервере, вы можете использовать 'wget' в командной строке:

wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'

ИЛИ:

wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"

- Доступ к переменным в php -

В обоих вариантах 1 и 2 вы получаете следующие параметры:

$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];

Ответ 8

Если вам нужно передать $_GET, $_REQUEST, $_POST или что-то еще, вы также можете использовать интерактивный режим PHP:

php -a

Затем введите:

<?php
$_GET['a']=1;
$_POST['b']=2;
include("/somefolder/some_file_path.php");

Это позволит вручную установить любые переменные, которые вы хотите, а затем запустить ваш php файл с этими переменными.

Ответ 9

Если у вас есть возможность редактировать PHP script, вы можете искусственно заполнить массив $_GET, используя следующий код в начале script, а затем вызовите script с синтаксисом: php -f script.php name1=value1 name2=value2

// When invoking the script via CLI like "php -f script.php name1=value1 name2=value2", this code will populate $_GET variables called "name1" and "name2", so a script designed to be called by a web server will work even when called by CLI
if (php_sapi_name() == "cli") {
    for ($c = 1; $c < $argc; $c++) {
        $param = explode("=", $argv[$c], 2);
        $_GET[$param[0]] = $param[1]; // $_GET['name1'] = 'value1'
    }
}

Ответ 10

В командной строке вставьте следующие

export QUERY_STRING="param1=abc&param2=xyz" ;  
POST_STRING="name=John&lastname=Doe" ; php -e -r 
'parse_str($_SERVER["QUERY_STRING"], $_GET); parse_str($_SERVER["POST_STRING"], 
$_POST);  include "index.php";'

Ответ 11

Я просто передаю их следующим образом:

php5 script.php param1=blabla param2=yadayada

работает просто отлично, массив $_GET:

array(3) {
  ["script_php"]=>
  string(0) ""
  ["param1"]=>
  string(6) "blabla"
  ["param2"]=>
  string(8) "yadayada"
}

Ответ 12

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'

Ответ 13

или просто (если у вас есть LYNX):

lynx 'http://localhost/index.php?a=1&b=2&c=3'