2011-07-21 80 views
19

我做了一个运行php脚本的bash脚本。它工作正常,无参数,但是当我添加参数(ID和URL),存在一些误区:如何将参数从bash传递给php脚本?

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 

我从庆典上运行PHP脚本是这样的:

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

回答

26

称呼其为:

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()是quick'n'dirty方式得到它的工作。

+0

没错!谢谢你Tino – user420574

+0

你将如何传递一个目录到PHP脚本? – Michael

+1

@Michael,同样的方法,只需从'$ argv'数组中读取即可。另外,线程死灵是不好的。 –

6

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

这是你可以传递给由$argc和读取参数(中 - 表示所有后续参数应该到脚本,而不是PHP解释器的二进制):

php myfile.php -- argument1 argument2

+1

如果您使用php-cgi,则可以传递GET查询参数: 请参阅此处的示例:https://serverfault.com/questions/187025/how-to-pass-get-variables-to-a-php-script-通过命令行 – Bastion

+0

@Bastion magic link,谢谢! – icc97

4

- 选项1:php-cgi -

使用'php-cgi'来代替'php'来运行你的脚本。这是因为你不需要特意修改你的PHP代码与它合作的最简单的方法:

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

- 选项2:如果你有一个Web服务器 -

如果PHP文件是在命令行中,你可以使用 'wget的' web服务器上:

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

OR:

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

- 访问PHP中的变量 -

在这两种选项1 & 2你像这样访问这些参数:

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