是否可以使用php cli从用户那里获取输入,然后将输入转储到变量中,然后继续执行脚本。
就像c ++ cin
函数一样?
如果是,那可能是怎么回事? 也许不仅是php而且可能还有一些linux命令?
由于
答案 0 :(得分:84)
您可以这样做:
$line = fgets(STDIN);
在php CLI模式下从标准输入读取一行。
答案 1 :(得分:68)
看看这个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 :(得分:4)
在这个例子中,我扩展了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模式不是二进制安全。你应该添加&#34; b&#34;到您的模式并使用以下代码:
<?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而不是&#34; php:// stdin&#34;。
<?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";
?>
答案 3 :(得分:0)
类似地,你可以创建一个函数,比如 python。
$line = input("Please put in a number: ");
if ($line === 20){
echo true;
} else {
echo false;
}
function input(string $prompt = null): string
{
echo $prompt;
$handle = fopen ("php://stdin","r");
$output = fgets ($handle);
return trim ($output);
}