在 Perl 程序中使用 linux 命令,并通过 php exec() 使用 Perl


Use a linux command in a Perl programm, and use Perl through php exec()

我正在创建一个系统,允许我在铭文后自动创建用户。通过这种方式,我制作了一个 Perl 脚本,它生成一个随机密码,用"mkpasswd"加密它,然后用"useradd"创建一个用户,然后将用户信息发送到数据库。

我搜索了文档,并尝试使用 php exec 函数来调用 Perl 程序。

$command = "/server/backoffice/scripts/usercreation.pl $username";
exec($command, $result);
print_r($result);

usercreation.pl 脚本在终端中工作正常,但由于未知原因,它只是无法从 php 工作,什么也没发生,我知道问题来自 useradd 语法,或者如果不是来自 useradd 命令。返回的错误值为 255 <=> 0xff <=> -1 。

我认为问题来自useradd的--password选项,实际上,此选项使用mkpasswd,也许它可能会干扰shell或其他类似的东西:p

Perl 程序使用的完整 useradd 命令:

system("/usr/sbin/useradd $username -m -d $home --expiredate $expire --shell $shell --gid $gid --password $c_password");

编辑:粘贴上的 usercreation.pl 文件(已被截断到我们正在调查的部分):http://pastebin.com/DgFdndXf

该 php 一:http://pastebin.com/pQhADNzg

使用的 Web 服务器是 nginx/0.7.65。

使用的 php 版本是 PHP 5.3.3-1。

uname -a

Linux openco 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:35:26 UTC 2012 i686 GNU/Linux

谢谢大家!

useradd必须以 root 身份运行,因此您需要sudo指定 nginx 可以以 root 身份运行脚本。

对这些东西要格外小心;确保清理用户名并使用escapeshellarg()正确转义命令。