如何将参数从 bash 传递到 php 脚本?

Posted

技术标签:

【中文标题】如何将参数从 bash 传递到 php 脚本?【英文标题】:How to pass parameters from bash to php script? 【发布时间】:2011-10-10 09:50:45 【问题描述】:

我已经完成了一个运行 php 脚本的 bash 脚本。没有参数也能正常工作,但是当我添加参数(id 和 url)时,会出现一些错误:

PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf                                                                                        .d/mcrypt.ini on line 1 in Unknown on line 0
Could not open input file: /var/www/dev/dbinsert/script/automatisation.php?                                                                                        id=1

我像这样从 bash 运行 php 脚本:

php /var/www/dev/dbinsert/script/automatisation.php?id=19&url=http://bkjbezjnkelnkz.com

【问题讨论】:

【参考方案1】:

称它为:

php /path/to/script/script.php -- 'id=19&url=http://bkjbezjnkelnkz.com'

另外,修改您的 PHP 脚本以使用 parse_str():

parse_str($argv[1]);

如果未设置索引$_SERVER['REMOTE_ADDR']


更高级的处理可能需要getopt(),但parse_str() 是让它工作的快速'n'dirty 方式。

【讨论】:

如何将目录传递给 php 脚本? @Michael,同样的,从$argv 数组中读取它。此外,线程死灵很糟糕。 我不确定是不是我做错了什么,或者php是否发生了变化,但没有必要使用--。当我使用$argv[1] 时,它只会读取--【参考方案2】:

您不能将 GET 查询参数传递给 PHP 命令行界面。将参数作为标准命令行参数传递并使用$argc and $argv globals 来读取它们,或者(如果您必须使用 GET/POST 参数)通过 curl/wget 调用脚本并以这种方式传递参数——假设您可以访问脚本通过本地网络服务器。

这就是传递参数以供$argc$argv 读取的方法(- 表示所有后续参数都应该发送到脚本而不是 PHP 解释器二进制文件):

php myfile.php -- argument1 argument2

【讨论】:

如果你使用 php-cgi,你可以传递 GET 查询参数 :) 在这里查看示例:serverfault.com/questions/187025/…【参考方案3】:

-- 选项1:php-cgi--

使用 'php-cgi' 代替 'php' 来运行你的脚本。这是最简单的方法,因为您无需专门修改 php 代码即可使用它:

php-cgi -f /my/script/file.php id=19 myvar=xyz

-- 选项 2:如果您有网络服务器--

如果 php 文件位于 web 服务器上,您可以在命令行中使用 'wget':

wget 'http://localhost/my/script/file.php?id=19&myvar=xyz'

或:

wget -q -O - "http://localhost/my/script/file.php?id=19&myvar=xyz"

-- 访问php中的变量--

在选项 1 和 2 中,您可以像这样访问这些参数:

$id = $_GET["id"];
$myvar = $_GET["myvar"];

【讨论】:

以上是关于如何将参数从 bash 传递到 php 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

从 bash 脚本向 python 传递参数

如何将带有管道符号的多个参数传递到bash脚本案例语句中

如何将密码从 bash 脚本传递到 aptitude 以安装 mysql?

如何将密码从 bash 脚本传递到 aptitude 以安装 mysql?

如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]

如何找到传递给 Bash 脚本的参数数量?