2013-10-18 133 views
3

我似乎无法得到一个变量传递给我的bash脚本从PHP。无论我尝试什么,$ uaddress和$ upassword都是空的。传递一个变量从PHP到bash

** * ** * ** * ** * ** * ** * ** *庆典* ** * ** * ** * ** * ***

#!/bin/bash -x 
useraddress=$uaddress 
upassword=$upassword 
ssh -p 222 -6 2400:8900::f03c:91f:fe69:8af "/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add" $useraddress --password $upassword --password2 $upassword .ssh 

** * ** * ** * * PHP * ** * ** * * * * ** * ***

<?php 
$upassword = 'test1234'; $uaddress = '[email protected]'; 
$addr = shell_exec('sudo /home/tpccmedia/cgi-bin/member_add_postfixadmin 2>&1'); echo $uaddress; echo $upassword; 
//$addr = shell_exec('ssh -p 222 -6 2400:8900::f03c:91f:fe69:8af /var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add; echo $useraddress; --password; echo $upassword; --password2; echo $upassword; .ssh'); 
echo "<pre>$addr</pre>"; 
var_dump($addr); 
?> 

** * ** * ** * ** 输出和调试 ** * ** * ** * * * *

[email protected] 

+ useraddress= 
+ upassword= 
+ ssh -p 2222 -6 2400:8900::f03c:91ff:fe69:8aaf '/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add' --password --password2 .ssh 

Welcome to Postfixadmin-CLI v0.2 
--------------------------------------------------------------- 
Path: /var/www/localhost/htdocs/postfixadmin 
--------------------------------------------------------------- 

Username: 
> 

string(404) "+ useraddress= + upassword= + ssh -p 2222 -6 2400:8900::f03c:91ff:fe69:8aaf '/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add' --password --password2 .ssh Welcome to Postfixadmin-CLI v0.2 --------------------------------------------------------------- Path: /var/www/localhost/htdocs/postfixadmin --------------------------------------------------------------- Username: > " 

回答

8

您需要将变量作为参数传递给shell脚本,并且shell脚本必须读取其参数。

所以在PHP中:

$useraddress = escapeshellarg('[email protected]'); 
$upassword = escapeshellarg('test1234'); 
$addr = shell_exec("sudo /home/tpccmedia/cgi-bin/member_add_postfixadmin $useraddress $upassword 2>&1"); 

,并在shell脚本:

useraddress=$1 
upassword=$2 
+0

你也肯定想逃避参数[escapeshellarg](http://www.php.net/manual/en/function.escapeshellarg.php) - 尤其是可能的密码字段包含特殊字符。 – tangrs

+0

@tangrs谢谢。我也忘了将字符串的单引号改为双引号,这样插值就可以工作。 – Barmar

+0

@Barmar no sir,$ useraddress = escapeshellarg($ useraddress);给出一个未定义的变量,escapeshellarg('$ useraddress')实际上会传递给BASH,但是作为一个字符串。 http://paste.ee/p/arOIF http://bpaste.net/show/141824/ – brad

2

明白了。

<?php 
$upassword = 'test1234'; $uaddress = '[email protected]'; 
$uaddress = escapeshellarg($uaddress); 
$upassword = escapeshellarg($upassword); 
$addr = shell_exec("sudo /home/tpcmedia/cgi-bin/member_add_postfixadmin $uaddress $upassword 2>&1"); 
?> 


#!/bin/bash -x 
uaddress=$1 
upassword=$2 
ssh -p 2222 -6 2400:8900::f03c:91ff:fe69:8aaf "/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add" $uaddress --password $upassword --password2 $upassword