从php调用bash脚本
我需要捕获web表单上的用户输入并将其传递给脚本以创建用户帐户,但我无法让它工作。到目前为止,我有一个add_user.sh脚本,如下所示:从php调用bash脚本,php,bash,web,Php,Bash,Web,我需要捕获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
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\u user.sh
(注意引号):
使其可执行:
me@somewhere$ chmod +x add_user.sh
从php
中调用它:
(我没有在这里安装php,因此无法彻底测试我的答案)
如果您不想使用辅助脚本,可以直接执行以下操作:
请确保您测试了返回值(和我一样)。您将在数组$output
中获得命令的输出
对每个参数使用
escapeshellarg
比在已经内置的完整命令上调用escapeshellcmd
安全得多。您必须在调用add_user.sh的php命令上传递这些参数。类似这样:passthru(“add_user.sh-u$NAME-p$PASS”)
。如果$NAME
来自web表单,则必须绝对确保使用正确的方法将其传递给命令行应用程序。考虑如果用户输入<代码>会发生什么;rm-rf/作为他们的用户名。。。e、 当然,Marc B所说的完全正确。有些危险,这取决于安全设置和$NAME和$PASS的数据源。Marc B对OP的评论也适用$NAME
和$PASS
在调用命令之前必须彻底清理。哦,天哪,这相当危险:)
不要使用这种方法我编辑了我的答案。quasivivo是对的,我补充说函数inI希望使用用户名gniourf-g admin
或类似的:)
注册。请不要使用此方法。
me@somewhere$ chmod +x add_user.sh
<?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
$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
}
?>