我正在写一个命令行工具来帮助我的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()
调用放在里面。
发布于 2009-11-04 22:41:55
在sitepoint上找到。
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;
}
}
发布于 2008-10-09 17:40:43
根据您的环境(例如,不是在Windows上),您可以使用ncurses库(具体地说,是用于停止键盘回显的ncurses_noecho()函数和用于读取输入的ncurses_getch()函数)来获取密码,而不在屏幕上显示它。
发布于 2012-08-26 06:21:48
您可以使用我的hiddeninput.exe文件来获得真正的隐藏输入,而不会将信息泄漏到屏幕上的任何地方。
<?php
echo 'Enter password: ';
$password = exec('hiddeninput.exe');
echo PHP_EOL;
echo 'Password was: ' . $password . PHP_EOL;
如果您删除了最后一个回显,密码应该永远不会出现,但您可以将其用于验证。
https://stackoverflow.com/questions/187736
复制相似问题