我需要在 Web 表单上捕获用户输入并将其传递给脚本以创建用户帐户,但我无法让它工作。到目前为止,我有一个 add_user.sh 脚本,内容如下:
adduser -u $NAME -p $PASS -g users -s /bin/bash
但我不确定这是否会从 Web 表单中捕获用户输入的数据?
您可以将其构建成一个字符串,然后使用exec
如果您的服务器启用了它
$str = 'adduser -u ' . $NAME . ' -p ' . $PASS . ' -g users -s /bin/bash';
exec(escapeshellcmd($str));
我之前可能应该注意到,许多主机出于安全原因禁用此功能以及执行命令行命令的任何功能。仅仅因为它存在并不能使它成为一个好主意。
像这样写你的脚本add_user.sh
(注意引号):
#!/bin/sh
adduser -u "$1" -p "$2" -g users -s /bin/bash
使其可执行:
me@somewhere$ chmod +x add_user.sh
并从内部调用它php
:
<?php
$command="/path/to/add_user.sh ".escapeshellarg($name)." ".escapeshellarg($pass);
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
# Oh dear! something bad happened
}
?>
(我这里没有安装 php,所以我无法彻底测试我的答案)
如果您不想使用辅助脚本,可以直接执行以下操作:
<?php
$command="/path/to/adduser -u ".escapeshellarg($name)." -p ".escapeshellarg($pass)." -g users -s /bin/bash";
exec ($command,$output=array(),$return_value);
if($return_value!==0) {
# Oh dear! something bad happened
}
?>
请确保您测试返回值(就像我所做的那样)。您将在数组中获得命令的输出$output
。
使用escapeshellarg
每个参数比调用escapeshellcmd
已经内置的完整命令安全得多。