The Pursuit of Happyness

스트림 필터 +1

PHP 모범 사례 4


http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0


- 스트림

파일, 네트워크, 데이터 압축처럼 공통적인 기능과 사용 방법을 공유하는 작업들을 일반화하는 수단.


-- 스트림 래퍼

고유한 프로토콜로 읽고 쓸수 있는 스트림 데이터의 유형. 다음과 같은 공통 과정을 거친다.

1. 통신 시작

2. 데이터 읽기

3. 데이터 쓰기

4. 통신 종료


형식

<scheme>://<target>

ex) 

https://www.google.com


생략시 file scheme으로 인식

ex) 

fopen('/etc/hosts', 'rb');

fopen('file:///etc/hosts', 'rb'); // "file://" 이후에 절대 경로 ("/etc/hosts" )를 적어 줘야 한다.


-- php:// 스트림 래퍼

php://stdin - 읽기 전용 PHP 스트림, CLI 에서 파이프를 통해 스크립트로 전달된 정보를 수신할 수 있다.

php://stdout - 현재 출력 버퍼에 데이터를 기록할 수 있다. (쓰기 전용으로 읽거나 탐색은 불가)

php://memory - 시스템 메모리 데이터를 읽고 쓸 수 있다. 

php://temp - php://memory 스트림과 동일하게 작동하지만 가용 메모리가 고갈되면 임시 파일에 기록된다.


-- 스트림 콘텍스트

스트림 콘텍스트를 이용하면 file_get_contents() 함수를 이용해서 HTTP POST 요청을 보낼 수 있다.


ex)


<?php

$requestBody = '{"username":"josh"}';

$context = stream_context_create( array(

    'http' => array(

        'method' => 'POST', 'header' => "Content-Type: application/json;charset=utf-8;\r\n" . "Content-Length: " . mb_strlen($requestBody), 'content' => $requestBody

    )

));

$response = file_get_contents('https://your_test_server.com/users', false, $context);


-- 스트림 필터

스트림을 전송하는 동안 데이터를 여과, 변형, 추가, 제거하기 위해 사용


ex) 마크다운 파일을 스트림으로 열어 메모리로 읽어들이면서 HTML 변환을 하는 작업

ex) 파일을 읽어서 모두 대문자로 변경해서 출력하는 작업


<?php

$handle = fopen('data.txt', 'rb');

stream_filter_append($handle, 'string.toupper');

while(feof($handle) !== true) {

    echo fgets($handle);

}

fclose($handle);





Comment +0