まず第一に、私は 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";
送信する前にキャスト (文字列) を試しましたが、何も動作しないようです。これをデバッグする方法についてのアイデアはありますか???
事前にどうもありがとうございました。
ポプランテ
PS: お粗末な文法で申し訳ありません。英語は私の母国語ではありません。