PHP命令行输入输出流STDIN/STDOUT/STDERR用法
一、PHP STDIN、STDOUT、STDERR简介:
STDIN、STDOUT、STDERR命令输入输出流,用于向控制台(linux shell终端、windows cmd终端)输入、输出内容,它们默认是已经打开的,可以直接对他们进行读写操作;它们只能在CLI(command-line interface,命令行界面)模式中使用,在Http模式时,它们是未定义的。而它们的打开副本php://stdin、php://stdout、php://stderr 也无法输出内容到http浏览器,经测试:写入php://stderr的内容将会输入到默认站点的错误日志中,其它两种无任何效果。
STDIN/STDOUT/STDERR简介:
原始流 | 流打开副本 | 描述 |
---|---|---|
STDIN | php://stdin | 标准输入(standard input),只读,用于从控制台输入内容; |
STDOUT | php://stdout | 标准输出(standard output),只写,用于向控制台输出正常信息; |
STDERR | php://stderr | 错误输出(standard error),只写,用于向控制台输出错误信息; |
二、PHP STDIN用法:
PHP语言中"STDIN"用于从控制台读取内容,遇到此常量或者通过fopen()函数打开“php://stdin”,脚本将会等待用户输入内容,直到用户按下回车键提交。测试脚本test.php内容:
<?php echo "请输出站点名称: "; $name = fgets(STDIN); echo sprintf("输入的站点名称为: %s\n", $name); $stdin = fopen('php://stdin', 'r'); echo "请输出域名: "; $domain = fread($stdin, 128); //最多读取128个字符 echo sprintf("输入的域名为: %s\n", $domain); fclose($stdin);运行结果:
[root@aiezu.com ~]# php test.php 请输出站点名称: 爱E族 输入的站点名称为: 爱E族 请输出域名: aiezu.com 输入的域名为: aiezu.com
三、PHP STDOUT用法:
PHP语言中"STDOUT"用于向控制台输出标准信息;向此常量、或者向fopen()函数打开的"php://stdout"写入的内容将直接输出到控制台的标准输出;标准输出的内容可以用过">"或者"1>"重定向到指定地方,比如文件。测试脚本test.php内容:
<?php fwrite(STDOUT, "我是通过STDOUT写入;\n"); $stdout = fopen("php://stdout", "w"); fwrite($stdout, "我是通过php://stdout写入;"); fclose($stdout);运行结果:
[root@aiezu.com ~]# php test.php 1> test.out [root@aiezu.com ~]# cat test.out 我是通过STDOUT写入; 我是通过php://stdout写入;
四、PHP STDERR用法:
PHP语言中"STDERR"用于向控制台输出错误信息;向此常量、或者向fopen()函数打开的"php://stderr"写入的内容将直接输出到控制台的错误输出;错误输出的内容可以用过"2>"重定向到指定地方,比如文件;也可以使用"2>&1"将错误输出定向到标准输出,与标准输出合并。测试脚本test.php内容:
<?php fwrite(STDERR, "STDERR写入的错误输出;\n"); fwrite(STDOUT, "STDOUT写入的正常输出;\n"); $stderr = fopen("php://stdout", "w"); fwrite($stderr, "php://stderr写入的错误输出;\n"); fclose($stderr);正常输出和错误输出分别定向到不同文件:
[root@aiezu.com ~]# php test.php 1>test.ok 2>test.err [root@aiezu.com ~]# cat test.ok STDOUT写入的正常输出; php://stderr写入的错误输出; [root@aiezu tmp]# cat test.err STDERR写入的错误输出;正常输出和错误输出合并定向到统一文件:
[root@aiezu.com ~]# php test.php 1>AllInOne 2>&1 [root@aiezu.com ~]# cat AllInOne STDERR写入的错误输出; STDOUT写入的正常输出; php://stderr写入的错误输出;