Как написать текстовую интерактивную PHP скрипт?
Я хочу написать php script, который я могу использовать из командной строки. Я хочу, чтобы он запрашивал и принимал ввод для нескольких элементов, а затем выдавал некоторые результаты. Я хочу сделать это в php, потому что все мои классы и библиотеки находятся в php, и я просто хочу сделать простой интерфейс командной строки для нескольких вещей.
Приглашение и прием повторных вводов командной строки - это часть, которая меня отключает. Как мне это сделать?
Ответы
Ответ 1
Из PHP: Чтение с клавиатуры - ввод данных пользователя из консоли клавиатуры путем ввода текста в формате:
Вам нужен специальный файл: php://stdin
, который обозначает стандартный ввод.
print "Type your message. Type '.' on a line by itself when you're done.\n";
$fp = fopen('php://stdin', 'r');
$last_line = false;
$message = '';
while (!$last_line) {
$next_line = fgets($fp, 1024); // read the special file to get the user input from keyboard
if (".\n" == $next_line) {
$last_line = true;
} else {
$message .= $next_line;
}
}
Ответ 2
Страница I/O Streams из руководства по PHP описывает, как вы можете использовать STDIN для чтения строки из командной строки:
<?php
$line = trim(fgets(STDIN)); // reads one line from STDIN
fscanf(STDIN, "%d\n", $number); // reads number from STDIN
?>
Ответ 3
Я не уверен, насколько сложным может быть ваш ввод, но readline - отличный способ обработать его для интерактивных программ CLI.
Вы получаете те же удобства существ, которые вы ожидаете от своей оболочки, например, история команд.
Использование его так же просто, как:
$command = readline("Enter Command: ");
/* Then add the input to the command history */
readline_add_history($command);
Если доступно, это действительно упрощает.
Ответ 4
Найден пример на PHP.net: http://www.php.net/manual/fr/features.commandline.php#94924
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if(trim($line) != 'yes') {
...
Ответ 5
Алгоритм прост:
until done:
display prompt
line := read a command line of input
handle line
Очень сложно использовать Array(), который отображает команды на функции обратного вызова, которые обрабатывают их. Вся задача - примерно цикл while и два вызова функций. PHP также имеет интерфейс readline для более сложных приложений оболочки.
Ответ 6
Одна строка кода (строка 2):
<?php
$name = trim(shell_exec("read -p 'Enter your name: ' name\necho \$name"));
echo "Hello $name this is PHP speaking\n";
exit;
Проверьте этот источник ответа на http://oneqonea.blogspot.com/2012/04/how-can-i-capture-user-input-from-cmd.html
Ответ 7
Простой:
#!/usr/bin/php
<?php
define('CONFIRMED_NO', 1);
while (1) {
fputs(STDOUT, "\n"."***WARNING***: This action causes permanent data deletion.\nAre you sure you're not going to wine about it later? [y,n]: ");
$response = strtolower(trim(fgets(STDIN)));
if( $response == 'y' ) {
break;
} elseif( $response == 'n' ) {
echo "\n",'So I guess you changed your mind eh?', "\n";
exit (CONFIRMED_NO);
} else {
echo "\n", "Dude, that not an option you idiot. Let try this again.", "\n";
continue;
}
}
echo "\n","You're very brave. Let continue with what we wanted to do.", "\n\n";
Ответ 8
Мои пять центов:
Используя STDOUT
и STDIN
:
fwrite(STDOUT, "Please enter your Message (enter 'quit' to leave):\n");
do{
do{
$message = trim(fgets(STDIN));
} while($message == '');
if(strcasecmp($message, 'quit') != 0){
fwrite(STDOUT, "Your message: ".$message."\n");
}
}while(strcasecmp($message,'quit') != 0);
// Exit correctly
exit(0);
Ответ 9
В основном вы читаете со стандартного ввода. См. http://www.php.net/manual/en/features.commandline.io-streams.php.