从php调用bash脚本

时间:2013-10-31 16:52:00

标签: php bash web

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以将其构建为字符串,然后使用exec如果您的服务器已启用

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

我之前应该注意到,许多主机出于安全原因禁用了此功能以及执行命令行命令的所有功能。只是因为这存在并不是一个好主意。

答案 1 :(得分: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更安全。