문제

나는 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 "!"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top