3

我需要在 Web 表单上捕获用户输入并将其传递给脚本以创建用户帐户,但我无法让它工作。到目前为止,我有一个 add_user.sh 脚本,内容如下:

adduser -u $NAME -p $PASS -g users -s /bin/bash

但我不确定这是否会从 Web 表单中捕获用户输入的数据?

4

2 回答 2

2

您可以将其构建成一个字符串,然后使用exec如果您的服务器启用了它

$str = 'adduser -u ' . $NAME . ' -p ' . $PASS . ' -g users -s /bin/bash';
exec(escapeshellcmd($str));

我之前可能应该注意到,许多主机出于安全原因禁用此功能以及执行命令行命令的任何功能。仅仅因为它存在并不能使它成为一个好主意。

于 2013-10-31T16:54:03.910 回答
0

像这样写你的脚本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已经内置的完整命令安全得多。

于 2013-10-31T17:01:10.727 回答