FTP 와 FTPS
압축 스트림
지원 프로토콜/래퍼 목록
PHP Manual

## PHP 입력/출력(input/output) 스트림

- php://stdin
- php://stdout
- php://stderr
- php://output
- php://input
- php://filter (PHP 5.0.0부터)
- php://memory (PHP 5.1.0부터)
- php://temp (PHP 5.1.0부터)

php://stdin, php://stdout, php://stderr은 PHP 프로세스의 입력이나 출력 스트림에 대한 접속 권한을 허용한다. 스트림은 복제된 파일 디스크립터를 참조하기에, php://stdin을 열고 나중에 닫으면, 복제된 디스크립터만 닫을 뿐입니다--`STDIN`을 참조하는 실제 스트림에는 영향을 주지 않습니다. 이에 대해서 PHP 5.2.1까지 버그가 있었음에 주의하십시오. 이 래퍼를 사용하여 수동으로 스트림을 여는 대신, `STDIN`, `STDOUT`, `STDERR` 상수를 이용하기를 권합니다.

php://output은 print() 와 echo() 같은 출력 버퍼 메카니즘에 대한 쓰기 권한을 허용한다.

php://input은 raw POST 데이터를 읽을수 있는 권한을 허용한다. $HTTP_RAW_POST_DATA에 대한 메모리 집적에 대한 차선책이고, 특별한 php.ini 디렉티브 설정이 필요치 않다. php://input은 enctype="multipart/form-data"에 사용할 수 없습니다.

php://stdin 과 php://input 은 읽기 전용, 반면에 php://stdout, php://stderr 은 php://output 쓰기 전용이다.

php://filter는 스트림을 열때 필터의 응용을 허용하도록 설계된 메타-래퍼(meta-wrapper)의 한 종류이다. 컨텐츠를 읽기전에 스트림에 대한 필터를 적용할 기회가 전혀 없는 readfile(), file(), file_get_contents() 같은 올-인-원(all-in-one) 함수에 대한 가용성을 갖는다.

php://filter 타겟은 그 'path'의 부분으로서 다음 'parameters'를 취한다.

- /resource=<필터링되는 스트림> (필수) 이 인수는 php://filter 사양의 끝부분에 위치해야 하고 필터링을 원하는 스트림을 가리켜야 한다.

  `<?php
  /* This is equivalent to simply:
  readfile("http://www.example.com");
  since no filters are actually specified */
  readfile("php://filter/resource=http://www.example.com");
  ?>`

- /read=<읽기 체인에 적용되는 필터 리스트> (선택적) 이 인수는 | 파이프 문자로 구분되는 하나이상의 필터명이 적용된다.

  `<?php
  /* 이는 www.example.com의 내용 전체를
  대문자로 출력합니다. */
  readfile("php://filter/read=string.toupper/resource=http://www.example.com");
  /* 이는 위와 동일하지만,
  ROT13 인코드를 같이 수행합니다. */
  readfile("php://filter/read=string.toupper|string.rot13/resource=http://www.example.com");
  ?>`

- /write=<쓰기 체인에 적용되는 필터 리스트> (선택적) 이 인수는 | 파이프 문자로 구분하는 하나이상의 필터명을 적용합니다.

  `<?php
  /* rot13필터에 문자열 "Hello World"를
  통과하고, 현재 디렉토리의
  example.txt에 씁니다. */
  file_put_contents("php://filter/write=string.rot13/resource=example.txt","Hello World");
  ?>`

- <양쪽 체인에 적용되는 필터 리스트> (선택적) read=나 write=에 선행하지 않는 모든 필터 목록은 읽기와 쓰기 양쪽 모두의 체인에 (적절하게) 적용합니다.

php://memory 래퍼는 데이터를 메모리에 저장합니다. php://temp도 비슷하게 작동하지만, 메모리 한계(기본값은 2MB)에 도달했을 때 임시 파일을 사용하여 데이터를 저장합니다.

php://temp 래퍼는 'path'에 다음의 'paramters'를 가집니다:

- /maxmemory:<바이트수>(선택적). 이 인수는 메모리 한계(데이터가 임시 파일에 쓰여지는 시점)의 기본값을 조정합니다.

  `<?php
  $fileMBs = 5 * 1024 * 1024;
  $fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
  fputs($fp, "hello\n");
  // 쓴 것을 읽기
  rewind($fp);
  echo stream_get_contents($fp);
  ?>`

래퍼(Wrapper) 요약(php://filter에 대한, 필터링 되는 래퍼의 요약으로 참조됨.)
속성 | 지원
--- | ---
allow_url_fopen으로 제한 | 아니오
allow_url_include로 제한 | php://input, php://stdin, php://memory, php://temp만.
읽기 허용 | php://input, php://stdin, php://memory, php://temp만.
쓰기 허용 | php://stdout, php://stderr, php://output, php://memory, php://temp만.
추가 허용 | php://stdout, php://stderr, php://output, php://memory, php://temp만. (쓰기와 동일)
동시 읽기/쓰기 허용 | php://memory, php://temp만.
stat() 지원 | php://memory, php://temp만.
unlink() 지원 | 아니오
rename() 지원 | 아니오
mkdir() 지원 | 아니오
rmdir() 지원 | 아니오

FTP 와 FTPS
압축 스트림
지원 프로토콜/래퍼 목록
PHP Manual