我是新手,而我正试图这样做:
}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ñ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。
答案 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。