【问题标题】:Pass shell variables as arguments to PHP script将 shell 变量作为参数传递给 PHP 脚本
【发布时间】:2014-02-12 16:57:45
【问题描述】:

我想将 shell 变量传递给 PHP 脚本。这是我的尝试:

var1=`echo name_16`
var2=`echo /home/place/end/name_16`
php script.php ${var1} ${var2}

这些变量包含特殊字符 [)(*&^%$#@!~<>_] 但没有连字符。

我正在运行 PHP 4.3.9 cgi。

我尝试在我的 PHP 脚本中提取变量:

    $fish = $argv[1];
    $sticks = $argv[2];

这些变量显示为空。我试过var_dump($argv);,这也返回null。
我是否正确传递了这些参数,或者我在这里遗漏了什么?

【问题讨论】:

  • 发件人:*.com/questions/7803025/… 试试$_SERVER['argv']
  • 您的参数究竟是什么样的?例子?我用一个简单的字母参数快速检查了一下,没有问题。
  • 发布一个实际示例,说明如何使用变量调用此脚本
  • 这个例子正是我在 .sh 脚本中调用脚本的方式。
  • 所以你是在调用 script.php 之后定义你的变量?

标签: php shell


【解决方案1】:

我想将此添加为评论,但需要答案的格式化能力才能回复。

代码还有其他问题。参数的基本测试表明变量应该有效。

foo.php的内容:

<?php
    print "$argv[1]\n$argv[2]\n" ;

    $x = $argv[1];
    $y = $argv[2];

    print "$x\n$y\n";
?>

然后设置:

$ var1=`echo name_16`
$ var2=`echo /home/place/end/name_16`

和执行:

$ php foo.php ${var1} ${var2}
name_16
/home/place/end/name_16
name_16
/home/place/end/name_16
$

因此,使用提供的信息无法重现该问题。以上是使用 PHP 5.2.6 (cli) (built: May 8 2008 08:53:44) 运行的,所以可能是版本行为的差异。

【讨论】:

  • 我认为这将是版本。可能是我无法访问 cli。
  • @eddiecubed 你能试试我上面做的同样简单的测试,看看会发生什么,以确保我们是苹果对苹果吗?
  • 我得到空值作为输出。这里的问题是版本。变量 register_argc_argv 设置为 false。这意味着 argv 永远不会被构建。所以我需要考虑使用不同的方式来发送这些变量。
  • @eddiecubed 感谢您尝试具体实验;我同意你的结论。
  • 感谢您的帮助。我决定将变量写入 sh 中的文本文件,然后在 php.ini 中读取该文件。这行得通。
【解决方案2】:

只需使用$argv,它是一组参数和特殊参数的引号。

http://www.php.net/manual/en/reserved.variables.argv.php

test.php:

<?php
  print_r($argv);
?>


>HHH="&^%$#@"
> php test.php hello args $HHH

输出:

Array
(
[0] => test.php
[1] => hello
[2] => args
[3] => &^%$#@

)

【讨论】:

  • 我已经尝试过了,但它一无所获。我已经尝试了 var_dump,但我想出了 null。
  • 我刚刚运行它并且它工作。您是否在特殊参数周围加了引号?
  • 我已经逐字尝试了您的测试,但输出为空。