web-dev-qa-db-ja.com

PHP Linuxコマンドプロンプトで$ _GETを渡す

私たちは通常経由でアクセスするとしましょう

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のようなものでしょうか?それはうまくいくと思います。

ありがとうございました!

118
Patrick

通常、コマンドラインスクリプトに引数を渡すには、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メソッドのパラメーターを指します。これらのパラメーターは、Webサーバーに入力する必要があるため、コマンドラインでは使用できません。

とにかく$ _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でも同じことができることに注意してください。

118
netcoder

これから ServerFaultで回答

phpの代わりにphp-cgiバイナリを使用し、次のようにコマンドラインで引数を渡します。

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

これは$_GETにこれを置きます:

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

次のように、Webサーバーによって設定される環境変数を設定することもできます。

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

Ubuntuにはphp-cgiバイナリがないので、これを行いました。

%alias php-cgi = "php -r '"' parse_str(implode( "&"、array_slice($ argv、2))、$ _GET); include($ argv [1]); '"'-" 
%php-cgi test1.php foo = 123 
 <html> 
 fooを123に設定します。
 </ html> 
 
%cat test1.php 
 <html> fooを<?php print $ _GET ['foo']?>。<に設定します。 /html>
16
Tim Booth
php file_name.php var1 var2 varN

次に、PHPの最初の行に$_GET変数を設定しますが、これは$_GET変数を設定する望ましい方法ではなく、後でその変数を使用して何を行うかによって問題が発生する可能性があります。

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

スクリプトを起動する変数は、PHPアプリの$argv配列からアクセスできます。最初のエントリは元のスクリプトの名前になるため、変数の束を処理する場合は、array_shift($argv)を実行してその最初のエントリを削除することができます。または、ローカル変数にロードするだけです。

10
T. Brian Jones

時々、渡されたパラメーターに$ _GETを設定するためにphpファイルを編集するオプションがない場合があります。また、php-cgiをインストールできない、またはインストールしたくない場合があります。

私はこれがその場合の最良の解決策であることがわかりました。

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

これにより、phpファイルの変更が回避され、プレーンなphpコマンドを使用できます。 php-cgiがインストールされている場合は、必ずそれを使用しますが、これが次善策です。このオプションは言及に値すると思いました

-rは、次の文字列でphpコードを実行することを意味します。そこで$ _GET値を手動で設定し、実行するファイルを参照します。

これは適切なフォルダーで実行する必要があることに注意してください。常にではありませんが、phpファイルがあるフォルダーで実行する必要があります。requiresステートメントは、ファイルの場所ではなく、相対的なURL

10

WGETを使用してみてください:

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

-オプション1:php-cgi-

スクリプトを実行するには、「php」の代わりに「php-cgi」を使用します。これは、PHPコードを特別に変更して作業する必要がないため、最も簡単な方法です。

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

-オプション2:Webサーバーがある場合-

PhpファイルがWebサーバー上にある場合、コマンドラインで「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"];
6
Bastion

PHPスクリプトを編集する可能性がある場合は、スクリプトの先頭で次のコードを使用して$ _GET配列を人為的に入力し、構文でスクリプトを呼び出すことができます: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'
    }
}
1
lucaferrario

$_GET$_REQUEST$_POST、またはその他の何かを渡す必要がある場合は、PHPインタラクティブモードを使用することもできます。

php -a

次に入力します:

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

これにより、必要な変数を手動で設定し、それらの変数を設定してphpファイルを実行します。

1
makman99

コマンドラインで次を貼り付けます

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";'
1
Jimmy Moran

次のように渡します。

php5 script.php param1=blabla param2=yadayada

$ _GET配列は次のとおりです。

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