PHP 中的命令行密码提示

2022-08-30 08:18:50

我正在编写一个命令行工具来帮助我的 Web 应用。它需要密码才能连接到服务。我希望脚本显示密码提示,这样我就不必将其作为命令行参数传递。

这很容易,但我希望它在键入时不要将密码回显到屏幕上。我如何使用 PHP 执行此操作?

在纯PHP(否)中执行此操作并将字符替换为的奖励点。system('stty')*

编辑:

该脚本将在类似unix的系统(linux或mac)上运行。该脚本是用PHP编写的,并且很可能会保持这种状态。

此外,为了记录在案,这样做的方法是:stty

echo "Password: ";
system('stty -echo');
$password = trim(fgets(STDIN));
system('stty echo');
// add a new line since the users CR didn't echo
echo "\n";

我宁愿没有电话在那里。system()


答案 1

站点点上找到

function prompt_silent($prompt = "Enter Password:") {
  if (preg_match('/^win/i', PHP_OS)) {
    $vbscript = sys_get_temp_dir() . 'prompt_password.vbs';
    file_put_contents(
      $vbscript, 'wscript.echo(InputBox("'
      . addslashes($prompt)
      . '", "", "password here"))');
    $command = "cscript //nologo " . escapeshellarg($vbscript);
    $password = rtrim(shell_exec($command));
    unlink($vbscript);
    return $password;
  } else {
    $command = "/usr/bin/env bash -c 'echo OK'";
    if (rtrim(shell_exec($command)) !== 'OK') {
      trigger_error("Can't invoke bash");
      return;
    }
    $command = "/usr/bin/env bash -c 'read -s -p \""
      . addslashes($prompt)
      . "\" mypassword && echo \$mypassword'";
    $password = rtrim(shell_exec($command));
    echo "\n";
    return $password;
  }
}

答案 2

根据您的环境(即不在Windows上),您可以使用ncurses库(特别是ncurses_noecho()功能停止键盘回显,ncurses_getch()读取输入)来获取密码而不在屏幕上显示它。


推荐