如何使用Shell将GET变量传递给php文件?

时间:2012-09-23 18:39:06

标签: php shell

  

可能重复:
  PHP passing $_GET in linux command prompt

我想用Shell脚本执行php文件,但我不知道如何传递GET变量。

此脚本“php script.php?var = data”不起作用,因为Shell无法找到“script.php?var = data”文件。

那么,你知道我如何传递我的变量吗?如果真的不可能使用GET变量,我可以通过其他方式传递变量并在我的php脚本中使用它吗?

3 个答案:

答案 0 :(得分:9)

如果您是通过命令行执行脚本(例如php your_script.php),则无法使用$_GET参数,就像您遇到的那样。

但是,您可以使用PHP的CLI,它慷慨地为您提供$argv数组。

要使用它,您将调用您的脚本:

php your_script.php variable1 "variable #2"

在脚本中,您可以使用以下命令访问变量:

<?php

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

?>

答案 1 :(得分: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");

?>

答案 2 :(得分: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脚本来获取网站的页面。