如何从文档中获取数据并与变量进行比较

时间:2017-01-02 21:27:46

标签: php phpseclib

我是新手,而我正试图这样做:

            }else{ //Si se ha pulsado el boton anyadir

            //Recojo datos del formulario
            $usuario = $_POST['nomusuario'];

            $comprobacion = $ssh->exec("awk -F ":" '{print $1}' /etc/passwd | grep $usuario", NET_SSH2_READ_SIMPLE);
            $filtrado = array_filter(explode($comprobacion));

            if($filtrado!=$usuario){
                echo '<div class="alert alert-warning">';
                    echo 'User '.$usuario.' exists.';
                echo '</div';
                echo $filtrado;
            }echo{

但是当我运行de代码总是显示&#34;用户存在&#34;,当我添加新用户时!我不明白。

如何将获取内容文档与变量进行比较?

我粘贴所有代码:

<?php

            set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/phpseclib');

            include ('/var/www/html/phpseclib/Net/SSH2.php');
            include ('/var/www/html/phpseclib/Crypt/RSA.php');

            $ipConexion=$_REQUEST['ipconexion'];
            $ipConexion='10.0.0.107';
            $sudo_password='retaco';

            define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

            $ssh = new Net_SSH2($ipConexion);
            $key = new Crypt_RSA();
            $key->loadKey(file_get_contents('/var/www/html/phpseclib/Crypt/id_rsa'));

            if (!$ssh->login('pi', $key)) {
                exit('Login failed:');
            }

        if(!isset($_POST['anyadir'])){ //Si NO se ha pulsado el boton anyadir

            echo '<form action="users.add.php" method="post">';

            echo '<input type="text" class="form-control" placeholder="usuario" name="nomusuario" />';

            ...

            echo 'El host conectado sporta '; echo $viewShell = $ssh->exec('cat /etc/shells | tail -n+2', NET_SSH2_READ_SIMPLE);
                    echo '<hr />';

            echo '<button type="submit" value="anyadir" name="anyadir" class="btn btn-default">A&ntilde;adir usuario</button>';
            echo '</form>';

        }else{ //Si se ha pulsado el boton anyadir

            //Recojo datos del formulario
            $usuario = $_POST['nomusuario'];

            $comprobacion = $ssh->exec("awk -F ":" '{print $1}' /etc/passwd | grep $usuario", NET_SSH2_READ_SIMPLE);
            $filtrado = array_filter(explode($comprobacion));

            if($filtrado!=$usuario){
                echo '<div class="alert alert-warning">';
                    echo 'El usuario '.$usuario.' ya existe.';
                echo '</div';
                echo $filtrado;
            }else{

                //echo '<div class="alert alert-success">';
                //    $useradd = $ssh->exec('useradd '.$usuario, NET_SSH2_READ_SIMPLE);
                //echo '</div';

                $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
                $ssh->write("sudo useradd ".$usuario."\n");

                $output = $ssh->read('#[pP]assword[^:]*:|username@username:~\$#', NET_SSH2_READ_REGEX);
                //echo $output;

                    if (preg_match('#[pP]assword[^:]*:|username@username:~\$#', $output)) {
                        $ssh->write($sudo_password."\n");
                        $ssh->read('username@username:~$');
                    }
                echo "Usuario agregado correctamente";
                echo '</pre>';
            }

        }

        ?>

感谢您的帮助! OM。

3 个答案:

答案 0 :(得分:1)

问题在于:

$comprobacion  = 'awk -...'; // you've got a name from awk
$filtrado = array_filter(explode($comprobacion)); // but explode needs 2 parameters

因此代码将导致:

Warning: explode() expects at least 2 parameters, 1 given .... on line ...
Warning: array_filter() expects parameter 1 to be array, null given in .... on line ...

我认为,你有指令&#34; display_errors&#34;设置为关闭,请检查您的日志,看看这些警告。

变量$ filtrado的值将设置为NULL,并且$ usuario具有值。结果条件if($ filtrado!= $ usuario)将始终为真,并且您收到了消息。

答案 1 :(得分:0)

array_filter返回一个数组,而我假设$usuario是一个字符串。那些永远不会平等。

答案 2 :(得分:0)

非常感谢您的建议。我可以帮你解决问题...

新代码:

            }else{ //Si se ha pulsado el boton anyadir

            //Recojo datos del formulario
            $usuario = $_POST['nomusuario'];
            $directorio = $_POST['directorio'];
            $grupos = $_POST['grupo'];
            $shell = $_POST['shell'];
            $comentario = $_POST['comentario'];

            $comprobacion = $ssh->exec('cat /etc/passwd | grep '.$usuario.' | cut -f1 -d":"', NET_SSH2_READ_SIMPLE);
            //$comprobacion = $ssh->exec("grep -w ".$usuario, NET_SSH2_READ_SIMPLE);

            if($comprobacion!=""){

                echo '<div class="alert alert-warning">';
                    echo 'El usuario '.$usuario.' ya existe.';
                echo '</div';

            }else{

现在,如果我写一个存在的用户,代码显示“thar user exists”。 如果不存在,则创建一个新用户。

有时我们需要很多眼睛......

我很开心。非常感谢。

干杯! OM。