LEN

php的三种CLI常量:STDIN,STDOUT,STDERR
昨天阅读sd框架源码看到这样一段代码print_r("将在当前位置创建项目,是否确定(y/n)?\n&q...
扫描右侧二维码阅读全文
04
2017/08

php的三种CLI常量:STDIN,STDOUT,STDERR

昨天阅读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,代表文件句柄。

![alt](http://len7.cc/static/upload/20170804/qX-5-5GuyT_FsTymPrH3ga7y.png)

应用一:

<?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));
}
Last modification:August 4th, 2017 at 10:29 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

One comment

  1. LEN

    看不懂