3

重複の可能性:
PHPがLinuxコマンドプロンプトで$_GETを渡す

シェルスクリプトでphpファイルを実行したいのですが、GET変数を渡す方法がわかりません。

シェルがファイル「script.php?var = data」を見つけることができないため、このスクリプト「phpscript.php?var=data」は機能しません。

だから、あなたは私が私の変数を渡すことができる方法を知っていますか?GET変数を使用することが本当に不可能な場合、別の方法で変数を渡して、phpスクリプトで使用できますか?

4

3 に答える 3

9

コマンドライン(など)を介してスクリプトを実行している場合、経験しているように、パラメーターphp your_script.phpを使用することはできません。$_GET

$argvただし、配列を提供するPHPのCLIを利用することはできます。

これを使用するには、次のようにスクリプトを呼び出します。

php your_script.php variable1 "variable #2"

スクリプト内では、次のコマンドで変数にアクセスできます。

<?php

$variable1 = $argv[1];
$variable2 = $argv[2];

?>
于 2012-09-23T18:43:49.333 に答える
2

私の考えは、/ usr / bin / phpにフィードするある種のラッパースクリプトを記述し、そこからデータを取得するための引数の文字列を与えることです。間違いなく、それはハックであり、おそらくそれは良いものではありませんが、それは仕事を成し遂げるはずです。

<?php
/** Wrapper.php
 **
 ** Description: Adds the $_GET hash to a shell-ran PHP script
 **
 ** Usage:       $ php Wrapper.php <yourscript.php> arg1=val1 arg2=val2 ...
**/

//Grab the filenames from the argument list
$scriptWrapperFilename = array_shift($argv); // argv[0]
$scriptToRunFilename = array_shift($argv); // argv[1]

// Set some restrictions
if (php_sapi_name() !== "cli")
    die(" * This should only be ran from the shell prompt!\n");

// define the $_GET hash in global scope
$_GET;

// walk the rest and pack the $_GET hash
foreach ($argv as $arg) {
    // drop the argument if it's not a key/val pair
    if(strpos($arg, "=") === false)
        continue;

    list($key, $value) = split("=", $arg);

    // pack the $_GET variable
    $_GET[$key] = $arg;
}

// get and require the PHP file we're trying to run
if (is_file($scriptToRunFilename))
    require_once $scriptToRunFilename;
else
    die(" * Could not open `$scriptToRunFilename' for inclusion.\n");

?>
于 2012-09-23T19:38:50.530 に答える
1

PHP CLIは、次のようなコマンド構造内で変数を受け取ります。

php woop.php --path=/home/meow/cat.avi

次に、http://php.net/manual/en/function.getopt.phpのようなものを使用して、PHPスクリプトでそのようなオプションを取得できます。

getopt('path')

または、直接フォームを取得することもできますargv

@GBDの代わりに、bashスクリプトを使用してサイトのページを取得することもできます。

于 2012-09-23T18:45:10.660 に答える