首先,我會說我是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 –