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

kri*_*tya 52 php

是否有可能使用php cli从用户那里获得输入,然后将输入转储到变量中,然后脚本继续运行.

就像c ++ cin函数一样?

这是可能的,如果是,那么如何?也许不仅是php而且可能还有一些linux命令?

谢谢

anu*_*ava 87

你可以简单地做:

$line = fgets(STDIN);
Run Code Online (Sandbox Code Playgroud)

在php CLI模式下从标准输入读取一行.

  • 在CORE php> 5.3.6的源代码中,它被定义为:```define('STDIN',fopen('php:// stdin','r')); define('STDOUT',fopen('php:// stdout','w')); define('STDERR',fopen('php:// stderr','w'));``` (4认同)
  • 只需像这样添加另一行:`$line2 = fgets(STDIN);` (2认同)
  • 如果你想循环读取直到EOF然后使用`while(FALSE!==($ line = fgets(STDIN))){echo"line = $ line"; }` (2认同)
  • `STDIN` 并不总是被定义,因此接受的答案更好。 (2认同)

Dev*_*raj 70

看看这个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";
?>
Run Code Online (Sandbox Code Playgroud)

  • @kritya - 我唯一的建议,如果你选择这种方法将使用`STDIN`常量而不是[PHP包装文档]中建议的"php:// stdin"(http://php.net/manual/en /wrappers.php.php). (6认同)
  • 编写一个获取输入并重用函数的函数. (2认同)

Nik*_*911 6

在此示例中,我将扩展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";
?>
Run Code Online (Sandbox Code Playgroud)

您应该注意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";
?>
Run Code Online (Sandbox Code Playgroud)

您也可以设置最大包机。这是我的个人例子。我建议将其用作您的代码。还建议直接使用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";
?>
Run Code Online (Sandbox Code Playgroud)