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_blocking
php 머리글에서:
#!/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
'programing' 카테고리의 다른 글
PHP는 null을 0과 동일하게 간주합니다. (0) | 2023.08.14 |
---|---|
각도가 있는 로케일 "XXX"에 대한 로케일 데이터가 누락됨 (0) | 2023.08.09 |
Windows에서 github/git Checkout이 '오류: 잘못된 경로'를 반환합니다. (0) | 2023.08.09 |
쉼표 연산자(c) (0) | 2023.08.09 |
복합 서버 선택기를 사용하여 서버를 선택한 후 30000ms 후 시간 초과가 발생했습니다. (0) | 2023.08.09 |