昨天阅读sd框架源码看到这样一段代码
print_r("将在当前位置创建项目,是否确定(y/n)?\n");
$read=read();
if(strtolower($read)!='y'){
exit();
}
function read(){
$fp = fopen('php://stdin', 'r');
$input = fgets($fp, 255);
fclose($fp);
$input = chop($input);
return $input;
}
竟然可以等待标准输入一行. 我也真是接触的太少, 惭愧啊. 细查 发现代码是可以优化的!
PHP CLI(command line interface)中,有三个系统常量,分别是STDIN、STDOUT、STDERR,代表文件句柄。

应用一:
<?php
while($line = fopen('php://stdin','r')){
echo fgets($line);
}
?>
操作 如下:
D:\x\www\xampp> php test.php
你好
你好
应用二:
<?php
echo STDIN;
?>
在dos命令行下直接返回STDIN文件指针(文件句柄)。如下:
D:\x\www\xampp> php test.php
Resouce id #1
应用三:
<?php
echo fgets(STDIN);
?>
STDIN可以拿到在dos下输入的内容,fgets读取这个STDIN文件句柄,即可打印出刚才输入的内容。如下:
D:\x\www\xampp> php test.php
你好
上面的内容copy自 http://www.cnblogs.com/thinksasa/archive/2013/02/27/2935158.html
简化代码:
function read(){
return trim(fgets(STDIN));
}
看不懂