PHP cli получает вход от пользователя, а затем сбрасывается в переменную?
Возможно ли получить вход от пользователя с помощью php cli, а затем сбрасывать ввод в переменную, а затем script идет вперед.
Как и функция С++ cin
?
Возможно ли, если да, то как?
Может быть, не только php, но, возможно, с некоторыми командами linux?
Спасибо
Ответы
Ответ 1
Взгляните на эту страницу руководства PHP
http://php.net/manual/en/features.commandline.php
в частности
<?php
echo "Are you sure you want to do this? Type 'yes' to continue: ";
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if(trim($line) != 'yes'){
echo "ABORTING!\n";
exit;
}
echo "\n";
echo "Thank you, continuing...\n";
?>
Ответ 2
Вы можете просто сделать:
$line = fgets(STDIN);
чтобы прочитать строку со стандартного ввода в режиме CLI.
Ответ 3
В этом примере я расширяю пример Devjar. Кредиты для него, например, кода. Последний пример кода прост и безопасен, на мой взгляд.
Когда вы используете свой код:
<?php
echo "Are you sure you want to do this? Type 'yes' to continue: ";
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if(trim($line) != 'yes'){
echo "ABORTING!\n";
exit;
}
echo "\n";
echo "Thank you, continuing...\n";
?>
Вы должны отметить, что режим stdin не двоично-безопасный. Вы должны добавить "b" в свой режим и использовать следующий код:
<?php
echo "Are you sure you want to do this? Type 'yes' to continue: ";
$handle = fopen ("php://stdin","rb"); // <-- Add "b" Here for Binary-Safe
$line = fgets($handle);
if(trim($line) != 'yes'){
echo "ABORTING!\n";
exit;
}
echo "\n";
echo "Thank you, continuing...\n";
?>
Также вы можете установить максимальные чартеры. Это мой личный пример. Я предлагаю использовать это как ваш код. Также рекомендуется использовать напрямую STDIN, чем "php://stdin".
<?php
/* Define STDIN in case if it is not already defined by PHP for some reason */
if(!defined("STDIN")) {
define("STDIN", fopen('php://stdin','rb'))
}
echo "Hello! What is your name (enter below):\n";
$strName = fread(STDIN, 80); // Read up to 80 characters or a newline
echo 'Hello ' , $strName , "\n";
?>