오늘은 PHP를 사용하여 Sphere Online Judge에서 몇 가지 온라인 질문에 도전하고 싶습니다. 표준 입력과 출력을 사용해야 하는데 최근에 PHP를 작성하고 있어서 그만 두었습니다. C를 사용하고 싶지 않습니다. 저는 주로 프로젝트를 작성할 때 양식을 제출하는데, 이 점을 실제로 고려하지 않았기 때문에 문서를 살펴보았습니다.
문서는 여기에 있습니다: http://php.net/manual/zh/wrappers.php.php
1. PHP STDIN, STDOUT, STDERR 소개:
STDIN
, STDOUT, STDERR
명령 입력 및 출력 스트림은 콘솔(Linux 쉘 터미널, Windows cmd 터미널)에 콘텐츠를 입력하고 출력하는 데 사용됩니다. 이들은 기본적으로 이미 열려 있으며 열 수 있습니다. 읽기 및 쓰기 작업은 CLI(명령줄 인터페이스, 명령줄 인터페이스) 모드에서만 사용할 수 있으며 HTTP 모드에서는 정의되지 않습니다. 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),只写,用于向控制台输出错误信息; |
官方推荐使用常量 STDIN、 STDOUT 和 STDERR 来代替它们手动打开的副本封装器php://stdin
、 php://stdout
和 php://stderr
。
【推荐学习:PHP视频教程】
二、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
그리고 열린 복사본 php://stdin
, php://stdout
, php://stderr
은 콘텐츠를 http 브라우저에 출력할 수 없습니다. , 테스트 후: php://stderr
에 작성된 내용은 기본 사이트의 오류 로그에 입력되며 나머지 두 가지는 아무런 영향을 미치지 않습니다. STDIN/STDOUT/STDERR 소개:
원본 스트림 | 스트림 공개 사본 | 설명 |
---|---|---|
STDIN | php://stdin | 표준 입력(표준 입력), 읽기 전용, 사용됨 콘솔에서 콘텐츠 입력; |
STDOUT | php://stdout | 표준 출력(표준 출력), 쓰기 전용 , 일반 정보를 콘솔에 출력하는 데 사용됩니다. |
STDERR | php://stderr | 오류 출력(표준) error ), 쓰기 전용, 오류 메시지 를 콘솔에 출력하는 데 사용됩니다. |
php://stdin
, php://stdout
및 php://stderr
. 【추천 학습: PHP 동영상 튜토리얼】2. PHP STDIN 사용법:
PHP 언어의 "STDIN"은 이 상수를 발견하거나 fopen()
을 통해 php:/를 열 때 사용됩니다. function /stdin
스크립트는 사용자가 Enter 키를 눌러 제출할 때까지 사용자 입력을 기다립니다. stdin.php
를 작성하여 테스트하세요:
<?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写入;% ☁ test3. PHP STDOUT 사용법: PHP 언어에서는
STDOUT
을 사용하여 전송합니다. 콘솔 출력 표준 정보에 대한 메시지; 이 상수 또는 fopen()
함수에 의해 열린php://stdout
에 작성된 내용은 콘솔의 표준 출력
으로 직접 출력됩니다. ; 표준 출력의 내용 ">
" 또는 "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.ok STDOUT写入的正常输出; php://stdout写入的正常输出; ☁ test cat demo.err STDERR写入的错误输出; php://stderr写入的错误输出;4. PHP STDERR 사용법: