How to create a silent [password] prompt in PHP
August 28, 2010
I’m creating a script that needs to ask for the MySQL root password and want to do a classic password prompt that doesn’t output the characters. I found this handy script that takes care of it.
The basic premise of the script is to detect windows. If found, use vbscript to create a popup InputBox. Otherwise, good ol’ linux allows you to suppress output:
/usr/bin/env bash -c 'read -s -p "Enter Password: " mypassword && echo $mypassword'
Here’s the whole script:
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;
}
}