Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php调用bash脚本_Php_Bash_Web - Fatal编程技术网

从php调用bash脚本

从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

我需要捕获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\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
    }
?>