PHP cli从用户获取输入然后转储到变量可能吗?

时间:2011-07-01 05:14:50

标签: php

是否可以使用php cli从用户那里获取输入,然后将输入转储到变量中,然后继续执行脚本。

就像c ++ cin函数一样?

如果是,那可能是怎么回事? 也许不仅是php而且可能还有一些linux命令?

由于

4 个答案:

答案 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);
}