回答:
通常、コマンドラインスクリプトに引数を渡すには、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
and でも同じことができることに注意してください$_COOKIE
。
getopt()
、これは明らかに、オプションではなく引数 が必要であることをPHPに伝えますf
f
(コロンを除いて指定されます)。したがって、これは構文です。
ServerFaultに関するこの回答から:
php-cgi
justの代わりにバイナリを使用php
し、次のようにコマンドラインで引数を渡します。
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
<b>Notice</b>: Undefined index: testing in <b> ... </b><br />
php-cgi -f /var/www/vhosts/example.com/public_html/index.php action=DoSomething
Works Good ..
Ubuntuにはphp-cgiバイナリがないので、次のようにしました。
%エイリアス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>
phpファイルを編集して、渡されたパラメーターに$ _GETを設定するオプションがない場合や、php-cgiをインストールできない、またはインストールしたくない場合があります。
私はこれがその場合の最良の解決策であることがわかりました:
php -r '$_GET["key"]="value"; require_once("script.php");'
これにより、phpファイルの変更が回避され、プレーンなphpコマンドを使用できるようになります。php-cgiがインストールされている場合は、必ずそれを使用してください。ただし、これが次善の策です。このオプションは言及する価値があると思いました
-rは、次の文字列でphpコードを実行することを意味します。そこで$ _GET値を手動で設定し、実行するファイルを参照します。
これは正しいフォルダーで実行する必要があることに注意してください。phpファイルが含まれているフォルダーではありませんが、requiresステートメントはコマンドの場所を使用して、ファイルの場所ではなく、相対URLを解決します。
php file_name.php var1 var2 varN
次に$_GET
、PHPの最初の行に変数を設定します。これは$_GET
変数を設定する望ましい方法ではなく、後でその変数を使用して何をするかによっては問題が発生する可能性があります。
if (isset($argv[1])) {
$_GET['variable_name'] = $argv[1];
}
スクリプトを起動する変数$argv
は、PHPアプリの配列からアクセスできます。最初のエントリは元のスクリプトの名前になるためarray_shift($argv)
、一連の変数を処理する場合は、最初のエントリを削除することをお勧めします。または、単にローカル変数にロードします。
使用してみてくださいWGET
:
WGET 'http://localhost/index.php?a=1&b=2&c=3'
$_GET
は実行中のウェブサーバーを意味します。
-オプション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"];
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'
}
}
私はそれらをこのように渡します:
php5 script.php param1=blabla param2=yadayada
$ _GET配列は次のとおりです。
array(3) {
["script_php"]=>
string(0) ""
["param1"]=>
string(6) "blabla"
["param2"]=>
string(8) "yadayada"
}
または単に(LYNXを使用している場合):
lynx 'http://localhost/index.php?a=1&b=2&c=3'
php [script name] "a=1&b=2&c=3"
はに値を入力しませんが、$_SERVER['QUERY_STRING']
を参照することで同じことを簡単に行うことができます$_SERVER['argv'][1]
。