programing

PHP 표준 입력?

abcjava 2023. 8. 9. 20:27
반응형

PHP 표준 입력?

저는 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));

한 번에 모든 것을 파악할 수 있습니다.

$contents = file_get_contents("php://stdin");
echo $contents;

에 사용할 수 있습니다.php://stdin:

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

이 기능은 다음과 같습니다.

$data = stream_get_contents(STDIN);

IIRC에서는 다음을 사용할 수도 있습니다.

$in = fopen(STDIN, "r");
$out = fopen(STDOUT, "w");

기술적으로는 같지만 구문적으로는 조금 더 깨끗합니다.

fgets를 사용할 때 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_blockingphp 머리글에서:

#!/usr/bin/php
<?php
stream_set_blocking(STDIN, false);
$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 "!"

STDIN 스트림을 수동으로 여는 대신, 너무 번거롭지 않게 한 줄만 읽으려면 내장된 readline() 기능을 사용합니다.

<?php
$age= readline("Enter your age: ");
echo "Your age is : ".$age;

PHP 설명서는 당신의 친구입니다: https://www.php.net/manual/en/function.readline.php

언급URL : https://stackoverflow.com/questions/554760/php-standard-input

반응형