수색…
통사론
- 모든 스트림에는 계획과 대상이 있습니다.
- <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