Server : Apache/2.4.18 (Ubuntu) System : Linux canvaswebdesign 3.13.0-71-generic #114-Ubuntu SMP Tue Dec 1 02:34:22 UTC 2015 x86_64 User : oppastar ( 1041) PHP Version : 7.0.33-0ubuntu0.16.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, Directory : /usr/share/php/Seld/CliPrompt/ |
Upload File : |
<?php /* * This file is part of CLI Prompt. * * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Seld\CliPrompt; class CliPrompt { /** * Prompts the user for input and shows what they type * * @return string */ public static function prompt() { $stdin = fopen('php://stdin', 'r'); $answer = self::trimAnswer(fgets($stdin, 4096)); fclose($stdin); return $answer; } /** * Prompts the user for input and hides what they type * * @param bool $allowFallback If prompting fails for any reason and this is set to true the prompt * will be done using the regular prompt() function, otherwise a * \RuntimeException is thrown. * @return string * @throws RuntimeException on failure to prompt, unless $allowFallback is true */ public static function hiddenPrompt($allowFallback = false) { // handle windows if (defined('PHP_WINDOWS_VERSION_BUILD')) { // fallback to hiddeninput executable $exe = __DIR__.'\\..\\res\\hiddeninput.exe'; // handle code running from a phar if ('phar:' === substr(__FILE__, 0, 5)) { $tmpExe = sys_get_temp_dir().'/hiddeninput.exe'; // use stream_copy_to_stream instead of copy // to work around https://bugs.php.net/bug.php?id=64634 $source = fopen($exe, 'r'); $target = fopen($tmpExe, 'w+'); stream_copy_to_stream($source, $target); fclose($source); fclose($target); unset($source, $target); $exe = $tmpExe; } $answer = self::trimAnswer(shell_exec($exe)); // clean up if (isset($tmpExe)) { unlink($tmpExe); } // output a newline to be on par with the regular prompt() echo PHP_EOL; return $answer; } if (file_exists('/usr/bin/env')) { // handle other OSs with bash/zsh/ksh/csh if available to hide the answer $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null"; foreach (array('bash', 'zsh', 'ksh', 'csh') as $sh) { if ('OK' === rtrim(shell_exec(sprintf($test, $sh)))) { $shell = $sh; break; } } if (isset($shell)) { $readCmd = ($shell === 'csh') ? 'set mypassword = $<' : 'read -r mypassword'; $command = sprintf("/usr/bin/env %s -c 'stty -echo; %s; stty echo; echo \$mypassword'", $shell, $readCmd); $value = self::trimAnswer(shell_exec($command)); // output a newline to be on par with the regular prompt() echo PHP_EOL; return $value; } } // not able to hide the answer if (!$allowFallback) { throw new \RuntimeException('Could not prompt for input in a secure fashion, aborting'); } return self::prompt(); } private static function trimAnswer($str) { return preg_replace('{\r?\n$}D', '', $str); } }