如何从文档中获取数据并与变量进行比较
How get data from a document and compare with variable
我是新手,我正在尝试这样做:
}else{ //Si se ha pulsado el boton anyadir
//Recojo datos del formulario
$usuario = $_POST['nomusuario'];
$comprobacion = $ssh->exec("awk -F ":" '{print }' /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{
但是当我 运行 解码时总是显示 "User tal exists",当我添加新用户时也是如此!没看懂。
如何将获取的内容文档与变量进行比较?
我粘贴所有代码:
<?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 }' /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>';
}
}
?>
感谢您的帮助!!
哦.
array_filter
returns 一个数组,而我假设 $usuario
是一个字符串。那些永远不会相等。
问题在这里:
$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) 将始终为真,您收到了消息。
非常感谢您的建议。我可以在你的帮助下解决问题...
新代码:
}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 exist"。
如果不存在则创建一个新用户。
有时候我们需要很多眼睛...
我很高兴。非常感谢。
干杯!
哦.
我是新手,我正在尝试这样做:
}else{ //Si se ha pulsado el boton anyadir
//Recojo datos del formulario
$usuario = $_POST['nomusuario'];
$comprobacion = $ssh->exec("awk -F ":" '{print }' /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{
但是当我 运行 解码时总是显示 "User tal exists",当我添加新用户时也是如此!没看懂。
如何将获取的内容文档与变量进行比较?
我粘贴所有代码:
<?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 }' /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>';
}
}
?>
感谢您的帮助!! 哦.
array_filter
returns 一个数组,而我假设 $usuario
是一个字符串。那些永远不会相等。
问题在这里:
$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) 将始终为真,您收到了消息。
非常感谢您的建议。我可以在你的帮助下解决问题...
新代码:
}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 exist"。 如果不存在则创建一个新用户。
有时候我们需要很多眼睛...
我很高兴。非常感谢。
干杯! 哦.