2017-01-02 2 views
1

Ich bin newbe und ich versuche, dies zu tun:Wie Daten aus einem Dokument erhalten und vergleichen mit variabler

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

aber wenn ich de Code ausführen zeigen immer „User tal existiert“, und als ich füge auch einen neuen Benutzer hinzu! Ich verstehe nicht.

Wie kann ich ein Get-Content-Dokument mit einer Variablen vergleichen?

I fügen Sie alle Code:

<?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>'; 
      } 

     } 

     ?> 

Danke für Ihre Hilfe !! OM.

+0

Bei einer nicht verwandten Sicherheitshinweis müssen Sie sicherstellen, dass Sie gegen Benutzernamen wie '; rm -rf * ' –

+0

' explode ($ comprobacion) 'nimmt zwei Parameter. Versuchen Sie 'explode (" \ n ", $ comprobacion)'. Auch @ Joec ist korrekt. 'array_filter' gibt ein Array zurück, während' $ usuario' eine Zeichenkette ist. – neubert

Antwort

1

die Probleme sind hier:

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

So ist der Code in Folge hat:

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

Ich gehe davon aus, können Sie die Richtlinie "display_errors" haben auf Aus gesetzt, so überprüfen Sie die Protokolle bitte, um diese Warnungen zu sehen.

Der Wert der Variablen $ filtrado wird dann auf NULL gesetzt, und $ usuario hat einen Wert. Im Ergebnis wird die Bedingung if ($ filtrado! = $ Usuario) immer wahr sein, und Sie haben die Nachricht erhalten.

0

array_filter gibt ein Array zurück, während ich annehmen würde, dass $usuario eine Zeichenfolge ist. Diese werden niemals gleich sein.

0

Vielen Dank für Ihre Vorschläge. Ich bin konnte das Problem mit Ihrer Hilfe lösen ...

neuer Code:

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

Nun, wenn ich einen exist Benutzer der Code-Show "Thar Benutzer existieren" schreiben. Wenn nicht vorhanden, erstellen Sie einen neuen Benutzer.

Manchmal brauchen wir viele Augen ...

Ich bin sehr glücklich. Vielen, vielen Dank.

Prost! OM.

Verwandte Themen