수색…


통사론

  • 모든 스트림에는 계획과 대상이 있습니다.
  • <scheme> : // <target>

매개 변수

매개 변수 이름 기술
스트림 리소스 <scheme>://<target> 구문으로 구성된 데이터 공급자

비고

스트림은 본질적으로 출발지와 목적지 사이의 데이터 전송으로 Josh Lockhart라는 책을 Modern PHP라는 책에서 바꿔 쓰려고합니다.

출발지와 목적지는

  • 파일
  • 명령 행 프로세스
  • 네트워크 연결
  • ZIP 또는 TAR 아카이브
  • 임시 메모리
  • 표준 입력 / 출력

또는 PHP의 스트림 래퍼 를 통해 사용할 수있는 다른 리소스가 있어야합니다.

사용 가능한 스트림 래퍼 ( schemes )의 예 :

  • file : // - 로컬 파일 시스템에 접근하기
  • http : // - HTTP (s) URL 액세스
  • ftp : // - FTP URL 액세스
  • php : // - 다양한 I / O 스트림에 접근하기
  • phar : // - PHP 아카이브
  • ssh2 : // - 보안 쉘 2
  • ogg : // - 오디오 스트림

scheme (origin)은 스트림 래퍼의 식별자입니다. 예를 들어 파일 시스템의 경우 file:// 입니다. 대상은 스트림의 데이터 소스 (예 : 파일 이름)입니다.

스트림 래퍼 등록

스트림 래퍼는 하나 이상의 특정 스키마에 대한 처리기를 제공합니다.

아래 예제는 스트림이 닫힐 때 PATCH HTTP 요청을 보내는 간단한 스트림 래퍼를 보여줍니다.

// register the FooWrapper class as a wrapper for foo:// URLs.
stream_wrapper_register("foo", FooWrapper::class, STREAM_IS_URL) or die("Duplicate stream wrapper registered");

class FooWrapper {
    // this will be modified by PHP to show the context passed in the current call.
    public $context;

    // this is used in this example internally to store the URL
    private $url;

    // when fopen() with a protocol for this wrapper is called, this method can be implemented to store data like the host.
    public function stream_open(string $path, string $mode, int $options, string &$openedPath) : bool {
        $url = parse_url($path);
        if($url === false) return false;
        $this->url = $url["host"] . "/" . $url["path"];
        return true;
    }

    // handles calls to fwrite() on this stream
    public function stream_write(string $data) : int {
        $this->buffer .= $data;
        return strlen($data);
    }

    // handles calls to fclose() on this stream
    public function stream_close() {
        $curl = curl_init("http://" . $this->url);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $this->buffer);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_exec($curl);
        curl_close($curl);
        $this->buffer = "";
    }

    // fallback exception handler if an unsupported operation is attempted.
    // this is not necessary.
    public function __call($name, $args) {
        throw new \RuntimeException("This wrapper does not support $name");
    }

    // this is called when unlink("foo://something-else") is called.
    public function unlink(string $path) {
        $url = parse_url($path);
        $curl = curl_init("http://" . $url["host"] . "/" . $url["path"]);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_exec($curl);
        curl_close($curl);
    }
}

이 예제는 일반 스트림 래퍼에 포함될 예제 만 보여줍니다. 이것들은 이용 가능한 모든 방법이 아닙니다. 구현할 수있는 메소드의 전체 목록은 http://php.net/streamWrapper 에서 찾을 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow