Как я пишу командной строке интерактивный Сценарий PHP?

Я хочу записать Сценарий PHP, который я могу использовать из командной строки. Я хочу, чтобы это запросило и приняло вход для нескольких объектов и затем выложило некоторые результаты. Я хочу сделать это в PHP, потому что все мои классы и библиотеки находятся в PHP, и я просто хочу сделать простой интерфейс командной строки к нескольким вещам.

Запрос и принятие повторных исходных данных командной строки являются частью, это сбивает меня с толку. Как я делаю это?

19
задан Peter Mortensen 24 July 2018 в 15:42
поделиться

6 ответов

Из 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;
    }
}
15
ответ дан 30 November 2019 в 02:36
поделиться

Не знаю, насколько сложным может быть ваш ввод, но readline - отличный способ его обработки для интерактивных программ CLI.

Вы получаете от него те же удобства, что и от оболочки, например, историю команд.

Использовать его просто:

$command = readline("Enter Command: ");
/* Then add the input to the command history */
readline_add_history($command);

Если доступно, он действительно упрощает работу.


Вот типичный do-case-while для реализации консоли:

do {
  $cmd = trim(strtolower( readline("\n> Command: ") ));
  readline_add_history($cmd);
  switch ($cmd) {
    case 'hello': print "\n -- HELLO!\n"; break;
    case 'bye': break;
    default: print "\n -- You say '$cmd'... say 'bye' or 'hello'.\n";
  }
} while ($cmd!='bye');

где пользователь может использовать стрелки (вверх и вниз) для доступа к истории.

10
ответ дан 30 November 2019 в 02:36
поделиться

Алгоритм прост:

until done:
    display prompt
    line := read a command line of input
    handle line

Очень тривиально использовать массив, который сопоставляет команды с функциями обратного вызова, которые их обрабатывают. Вся проблема представляет собой примерно цикл while и два вызова функций. PHP также имеет интерфейс чтения для более сложных приложений оболочки.

1
ответ дан 30 November 2019 в 02:36
поделиться

В основном вы читаете со стандартного ввода. См. Потоки ввода / вывода .

0
ответ дан 30 November 2019 в 02:36
поделиться

Я нашел пример на PHP.net, Utiliser PHP en ligne de commande :

$handle = fopen("php://stdin", "r");
$line = fgets($handle);
if (trim($line) != 'yes') {
...
3
ответ дан 30 November 2019 в 02:36
поделиться

Страница I / O Streams из руководства PHP описывает, как вы можете использовать STDIN для чтения строки из командной строки:

<?php
 $line = trim(fgets(STDIN)); // reads one line from STDIN
 fscanf(STDIN, "%d\n", $number); // reads number from STDIN
?>
19
ответ дан 30 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: