php 输入 输出,PHP 的标准输入与输出

这篇文章介绍的内容是关于PHP 的标准输入与输出,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

简述 PHP 的标准输入与输出

7个月前 ⋅ 956 ⋅ 11 ⋅ 0

今天想在Sphere Online Judge中用PHP来在线挑战一些题目,要用到标准输入输出,但最近在写php又不想用c来写,平时写项目都是表单提交,还真没有考虑过这个,于是看了下文档。

文档在此:http://php.net/manual/zh/wrappers.php.php

一、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简介:原始流流打开副本描述STDINphp://stdin标准输入(standard input),只读,用于从控制台输入内容;

STDOUTphp://stdout标准输出(standard output),只写,用于向控制台输出正常信息;

STDERRphp://stderr错误输出(standard error),只写,用于向控制台输出错误信息;

官方推荐使用常量 STDIN、 STDOUT 和 STDERR 来代替它们手动打开的副本封装器php://stdin、 php://stdout 和 php://stderr。

二、PHP STDIN用法:

PHP语言中"STDIN"用于从控制台读取内容,遇到此常量或者通过fopen()函数打开php://stdin脚本将会等待用户输入内容,直到用户按下回车键提交。

写个stdin.php测试一下:<?php

echo "请输入内容:";

$jimmy = fgets(STDIN);

echo sprintf("输入的内容为: %s\n", $jimmy);

$demo = fopen('php://stdin', 'r');

echo "请输入: ";

$test = fread($demo, 12); //最多读取12个字符

echo sprintf("输入为: %s\n", $test);fclose($demo);

运行结果:请输入内容:sad

输入的内容为: sad

请输入: asdasdasdasdasdasd

输入为: asdasdasdasd(这里因为设置了最多读取12个字符,设置更多一些就可以完整显示)

三、PHP STDOUT用法:

PHP语言中STDOUT用于向控制台输出标准信息;向此常量、或者向fopen()函数打开的php://stdout写入的内容将直接输出到控制台的标准输出;标准输出的内容可以用过">"或者"1>"重定向到指定地方,比如文件。

同理我们写个文件来测试一下<?php

fwrite(STDOUT, "通过STDOUT写入;\n");

$demo = fopen("php://stdout", "w");

fwrite($demo, "通过php://stdout写入;");

fclose($demo);

运行一下:☁ test php demo.php > a.txt

☁ test cat a.txt

通过STDOUT写入;

通过php://stdout写入;% ☁ test php demo.php

通过STDOUT写入;

通过php://stdout写入;% ☁ test

四、PHP STDERR用法:

PHP语言中"STDERR"用于向控制台输出错误信息;向常量、或者向fopen()函数打开的"php://stderr"写入的内容将直接输出到控制台的错误输出;错误输出的内容可以用过"2>"重定向到指定地方,比如文件;也可以使用"2>&1"将错误输出定向到标准输出,与标准输出合并。

我们测试一下<?php

fwrite(STDERR, "STDERR写入的错误输出;\n");

fwrite(STDOUT, "STDOUT写入的正常输出;\n");

$stdout = fopen("php://stdout", "w");

fwrite($stdout, "php://stdout写入的正常输出;\n");

fclose($stdout);$stderr = fopen("php://stderr", "w");

fwrite($stderr, "php://stderr写入的错误输出;\n");

fclose($stderr);

正常输出和错误输出分别定向到不同文件:☁ test php demo.php 1>demo.ok 2>demo.err

☁ test cat demo.okSTDOUT写入的正常输出;

php://stdout写入的正常输出;☁ test cat demo.errSTDERR写入的错误输出;

php://stderr写入的错误输出;

正常输出和错误输出合并定向到统一文件:☁ test php demo.php 1>AllInOne 2>&1☁ test cat AllInOneSTDERR写入的错误输出;

STDOUT写入的正常输出;

php://stdout写入的正常输出;

php://stderr写入的错误输出;

好了,接下来可以去Sphere Online Judge叱咤风云了,先测试个demo题目

46760011dfa6a8b7203fa1936566fa80.png

写个代码<?php

// your code here$x=0;while($x!=42){

$x = fgets(STDIN);

if($x!=42){

echo sprintf("%d\n",$x);}}?>

提交

b2508a57b8414f4c2f17b3d87bf37867.png

哈哈哈哈,完全ok,再也不用限制于java和c了,我可以用PHP挑战一些题目了,大家也可以去试试

相关推荐:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值