我需要在Web窗体上捕获用户输入并将其传递给脚本以创建用户帐户,但我无法使其工作。到目前为止,我有一个add_user.sh脚本读取这样的:从PHP调用bash脚本
adduser -u $NAME -p $PASS -g users -s /bin/bash
但林不知道这是怎么回事捕获用户从Web表单中输入的数据?
我需要在Web窗体上捕获用户输入并将其传递给脚本以创建用户帐户,但我无法使其工作。到目前为止,我有一个add_user.sh脚本读取这样的:从PHP调用bash脚本
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));
我应该有可能前面提到的,许多主机禁用该功能,执行命令行的任何功能命令,出于安全原因, 。仅仅因为这存在并不是一个好主意。
有点危险,取决于安全设置和$ NAME和$ PASS的数据源。 http://php.net/manual/en/function.escapeshellcmd.php http://php.net/manual/en/function.escapeshellarg.php – Will
Marc B对OP的评论也适用。在调用命令之前,必须彻底清理“$ NAME”和“$ PASS”。 –
谢谢。我怎么能通过PHP调用它? – user2938994
写脚本add_user.sh
像这样(介意引号):
#!/bin/sh
adduser -u "$1" -p "$2" -g users -s /bin/bash
使其可执行:
[email protected]$ 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 inst这里alled,所以我不能彻底地测试我的答案)
如果你不想用你的若干辅助脚本,就可以直接做:
<?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
安全得多。
你必须在你用来调用add_user.sh的php命令上传递这些参数。就像这样:'passthru(“add_user.sh -u $ NAME -p $ PASS”);'。 – Jacobson
如果'$ NAME'来自Web窗体,那么你已经使**绝对**确定你正在使用正确的方法将它传递给命令行应用程序。考虑如果用户输入'; rm -rf /'作为他们的用户名...例如http://php.net/escape_shell_arg –
当然,马克B说的是完全正确的。 – Jacobson