首先,我会说我是Perl新手。将PHP参数从数据库传递给Perl脚本,
我有一个问题,传递一个PHP参数到我的Perl脚本。参数来自SQL查询。这里是代码的一个例子和解释。
此代码用于发送ID并从数据库中检索用户的全名,然后将其发送到perl脚本,以便用户从Fortinet无线设备中删除。
PHP代码
function deleteUser($db){
$id = $POST['param'];
$SQLq = 'delete from users where id = ?';
$q = $db->prepare($SQLq);
$q->execute(array($id));
$data = $q->fetch();
$username = $data['user_name']; #data-type in phpmyadming : varchar
exec('perl /var/www/xxx/deleteUserWifi.pl'.' '.escapeshellarg($id).' '.escapeshellarg($username),$output);
}
下面是从我的Perl脚本
#!/usr/bin/perl -w
use strict;
use Net::SSH::Perl;
#login info to log on the fortinet device
my $hostname = "192.168.0.2";
my $username = "aaaa";
my $password = "xxxx";
my $userID= $ARGV[0];
my $userName = $ARGV[1];
#connection to the FORTINET device
my $ssh = Net::SSH::Perl->new($hostname);
$ssh->login($username, $password);
#string to execute
my $cmd = "config vdom \n
edit root \n
config system dhcp server \n
edit 2 \n
config reserved-address \n
delete ". $userID ." \n
end \n
end \n
config firewall address \n
delete \"" .$userName "\" \n
end \n
end \n
exit"
my($stdout,$stderr,$exit) = $ssh->cmd($cmd);
代码我没有问题,我发送ID和删除发送的ID的用户的IP预约。出于某种原因,我无法从设备中删除的用户名进入,但如果我在PHP代码和硬编码去的用户名喜欢这个工作完全正常:
PHP代码
$username = "test test";
我曾尝试发送它之前,一个演员(字符串),但似乎没有任何作品。那么有关如何调试这个任何想法?
非常感谢您提前。
PoPlante
PS:很抱歉的穷人语法,英语不是我的第一语言。
拿去哪里'$ data'从何而来?你从'$ data ['user_name']'得到'$ username',但是你不把查询结果赋给'$ data'。 – vanneto
用PHP使用SSH2模块重新编写Perl脚本中的几行代码会更有意义吗? http://php.net/manual/en/book.ssh2.php –