문제
나는 PHP가 일반적으로 웹 개발에 사용된다는 것을 알고 있습니다. ~이다 표준 입력은 없지만 PHP는 일반 목적 스크립팅 언어로 사용할 수 있다고 주장합니다. 나는 PHP가 인쇄한다는 것을 알고있다 stdout
(또는 당신이 그것을 부르고 싶은 것은 무엇이든) print
그리고 echo
, 충분히 간단하지만 PHP 스크립트가 어떻게 입력 될 수 있는지 궁금합니다. stdin
(특히 fgetc()
, 그러나 입력 함수가 양호) 또는 이것이 가능합니까?
해결책
읽을 수 있습니다 stdin
파일 핸들을 만들어 php://stdin
그런 다음 그것에서 읽으십시오 fgets()
예를 들어 라인의 경우 (또는 이미 언급했듯이 fgetc()
단일 캐릭터의 경우) :
<?php
$f = fopen( 'php://stdin', 'r' );
while( $line = fgets( $f ) ) {
echo $line;
}
fclose( $f );
?>
다른 팁
읽기 Stdin ~이다 추천 방법
<?php
while (FALSE !== ($line = fgets(STDIN))) {
echo $line;
}
?>
파일 핸들을 엉망으로 만들지 않으려면 사용하십시오. file_get_contents()
그리고 php://stdin
:
$ echo 'Hello, World!' | php -r 'echo file_get_contents("php://stdin");'
Hello, World!
(당신이 진정으로 많은 양의 데이터를 읽고 있다면 stdin
파일 핸들 접근법을 사용하고 싶을 수도 있지만 많은 메가 바이트에 좋습니다.)
간단한 방법은입니다
$var = trim(fgets(STDIN));
당신이 사용할 수있는 fopen()
~에 php://stdin
:
$f = fopen('php://stdin', 'r');
한 번에 모두 잡아라 :
$contents = file_get_contents("php://stdin");
echo $contents;
IIRC, 다음을 사용할 수도 있습니다.
$in = fopen(STDIN, "r");
$out = fopen(STDOUT, "w");
기술적으로 동일하지만 약간 깨끗한 구문면.
이것은 또한 작동합니다 :
$data = stream_get_contents(STDIN);
fget을 사용할 때는 Bash 스크립트에서 차단 될 수 있습니다. stdin
사용 중에는 설정되거나 비어 있지 않습니다 @
PHP 오류 제어 연산자.
#!/usr/bin/php
<?php
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// Fail to continue, php warning
이 동작은 설정을 통해 피할 수 있습니다 stream_set_blocking
PHP 헤더에서 :
#!/usr/bin/php
<?php
stream_set_blocking(STDIN, 0);
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// No errors or warnings, continue
echo $pipe . "!";
예를 들어, 다음으로 호출됩니다.
echo "Hello world" | ./myPHPscript
// Output "Hello world!"
./myPHPscript
// Output "!"