2017-01-02 10 views
1

との比較:どのように私はnewbeだと私はこれやろうとしている文書からデータを取得し、変数

  }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{ 

を私はデコードを実行すると、常に「ユーザーTALが存在する」と表示し、ときに私新しいユーザーも追加してください!わかりません。

get contentドキュメントと変数を比較するにはどうすればよいですか?あなたの助けのために

<?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[^:]*:|[email protected]:~\$#', NET_SSH2_READ_REGEX); 
       //echo $output; 

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

     } 

     ?> 

感謝!!:

は、私はすべてのコードを貼り付け OM。

+0

関連のないセキュリティノートでは、あなたが ';のようなユーザー名に対して防御していることを確認する必要があります。 rm -rf * ' –

+0

' explode($ comprobacion) 'は2つのパラメータをとります。 'explode(" \ n "、$ comprobacion)'を実行してください。また、@ JoeCも正しいです。 'array_filter'は配列を返しますが、' $ usuario'は文字列です。 – neubert

答えて

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 ... 

私は仮定し、あなたは、オフに設定ディレクティブ「はdisplay_errors」を持っているので、あなたのログをしてくださいチェックこれらの警告を見る。

変数$ filtradoの値はNULLに設定され、$ usuarioには値が設定されます。結果では、条件if($ filtrado!= $ usuario)は常に真であり、あなたはメッセージを受け取ります。

0

array_filterは配列を返しますが、私は$usuarioが文字列であると想定しています。それらは決して平等ではありません。

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{ 

、私が存在してユーザーにコードのショーを記述する場合は、「タールのユーザーが存在します」。 存在しない場合は、新しいユーザーを作成します。

時には私たちは、私はとても幸せです

...目の多くを必要とします。とても感謝しています。

乾杯! OM。

関連する問題