>백엔드 개발 >PHP 튜토리얼 >PHP 마스터 | PHP의 스트림 이해

PHP 마스터 | PHP의 스트림 이해

Lisa Kudrow
Lisa Kudrow원래의
2025-02-23 10:38:14695검색

PHP Master | Understanding Streams in PHP

코어 포인트

PHP 스트리밍은 파일, 네트워크 및 데이터 압축 작업을 일반화하기위한 강력한 도구입니다. 그들은 읽거나 쓸 수 있으며 스트림의 어느 곳에서나

가 될 수 있습니다. 각 스트림에는 특정 프로토콜 또는 인코딩을 처리하기위한 래퍼가 있습니다.
    PHP는 내장 포장지, 프로토콜 및 필터를 제공하며 사용자 정의 포장지, 프로토콜 및 필터의 생성 및 등록을 허용합니다. 기본 래퍼는
  • 이며 파일 시스템에 액세스 할 때마다 사용됩니다. 다른 포장지로는 HTTP, Amazon S3, MS Excel, Google Storage, Dropbox 및 Twitter 용 래퍼가 있습니다. fseek() 스트림 컨텍스트는 래퍼의 동작을 수정하고 향상시킬 수있는 스트림 별 매개 변수 또는 옵션입니다. 간단한 네트워크 작업에서 컬을 사용하는 데 사용될 수 있으며 다른 목적으로 개별적으로 수정하거나 만들 수 있습니다. 스트림은 PAAS 제공 업체 용 가상 파일 시스템 랩퍼를 만드는 데 사용될 수 있으며 사용자 정의 파일 형식 및 인코딩을 구현하는 응용 프로그램 용 사용자 정의 포장지 및 필터를 구축하는 데 사용할 수 있습니다.
  • PHP 스트림은 PHP가 제공하는 리소스이며 우리는 종종 투명하게 사용하지만 매우 강력한 도구 일 수도 있습니다. 우리는 그들의 힘을 활용하는 방법을 배우면 응용 프로그램을 더 높은 수준으로 끌어 올릴 수 있습니다. PHP 매뉴얼은 스트리밍에 대한 좋은 설명을 가지고 있습니다. & gt; 파일, 네트워크, 데이터 압축 및 일반적인 기능 세트와 용도를 공유하는 기타 작업을 일반화하는 방법으로 스트리밍이 소개되었습니다. 간단히 말해서 스트림은 스트림 가능한 동작을 나타내는 자원 객체입니다. 즉, 읽기 또는 선형으로 작성 될 수 있으며 스트림의 어느 곳에서나 file://를 만들 수 있습니다.
  • 각 스트림에는 특정 프로토콜 또는 인코딩을 처리하는 데 필요한 추가 코드가 포함 된 구현 래퍼가 있습니다. PHP는 사용자 정의 포장지를 쉽게 만들고 등록 할 수있는 내장 포장지를 제공합니다. 컨텍스트와 필터를 사용하여 래퍼의 동작을 수정하거나 향상시킬 수도 있습니다.
  • 흐름 기본
스트림의 기준 형식은 입니다. 는 래퍼의 이름이며

는 래퍼의 구문에 따라 다릅니다. 기본 래퍼는 fseek()이므로 파일 시스템에 액세스 할 때마다 스트림을 사용합니다. 예를 들어,

또는

를 작성하고 동일한 결과를 얻을 수 있습니다. 대신

를 사용하면 HTTP 스트림 래퍼를 사용하도록 PHP에 알려줍니다. 앞에서 언급했듯이 PHP는 일부 내장 포장지, 프로토콜 및 필터를 제공합니다. 컴퓨터에 설치된 포장지를 이해하려면 다음을 사용할 수 있습니다.

내 설치 출력은 다음과 같습니다

<code class="language-php"><?php
print_r(stream_get_transports());
print_r(stream_get_wrappers());
print_r(stream_get_filters());
?></code>
좋은 도구 세트는 아니십니까? 또한 Amazon S3, MS Excel, Google Storage, Dropbox 및 Twitter의 타사 스트림을 작성하거나 사용할 수 있습니다.

php : // 래퍼

PHP에는 자체 래퍼가있어 언어의 I/O 스트림에 액세스 할 수 있습니다. 기본

, 랩퍼는 기본 I/O 리소스를 매핑하며, 게시물 요청의 원래 본문이있는 읽기 전용 스트림이기도합니다. 데이터 페이로드를 게시물 요청 본문 내부에 넣는 원격 서비스를 처리 할 때 매우 편리합니다. 빠른 테스트를 위해 Curl을 사용해 봅시다 :

PHP 스크립트에 대한 응답으로 php://stdin의 결과는 다음과 같습니다. php://stdout 첫 번째 패킷은 php://stderr 배열에서 액세스 할 수 없습니다. 그러나 대신 를 사용하면 다음을받을 것입니다. php://input PHP 5.1은 임시 데이터를 읽고 쓰기 위해 및

스트림 포장지를 소개합니다. 이름에서 알 수 있듯이 데이터는 메모리 또는 기본 시스템에서 각각 관리하는 임시 파일에 저장됩니다. 또한
<code>Array
(
    [0] => tcp
    [1] => udp
    [2] => unix
    [3] => udg
    [4] => ssl
    [5] => sslv3
    [6] => sslv2
    [7] => tls
)
Array
(
    [0] => https
    [1] => ftps
    [2] => compress.zlib
    [3] => compress.bzip2
    [4] => php
    [5] => file
    [6] => glob
    [7] => data
    [8] => http
    [9] => ftp
    [10] => zip
    [11] => phar
)
Array
(
    [0] => zlib.*
    [1] => bzip2.*
    [2] => convert.iconv.*
    [3] => string.rot13
    [4] => string.toupper
    [5] => string.tolower
    [6] => string.strip_tags
    [7] => convert.*
    [8] => consumed
    [9] => dechunk
    [10] => mcrypt.*
    [11] => mdecrypt.*
)</code>
/와 같은 함수를 사용하여 스트림을 열 때 필터를 적용하도록 설계된 메타 래퍼 인

도 있습니다. print_r($_POST)

첫 번째 예제는 필터를 사용하여 디스크에 작성된 데이터를 인코딩하는 반면, 두 번째 예제는 두 개의 계단식 필터를 적용하여 원격 URL에서 데이터를 읽습니다. 결과는 응용 프로그램에서 매우 기본에서 매우 강력한 것까지 다양합니다.
<code class="language-bash">curl -d "Hello World" -d "foo=bar&name=John" http://localhost/dev/streams/php_input.php</code>
흐름 컨텍스트

$_POST 컨텍스트는 래퍼의 동작을 수정하고 향상시킬 수있는 스트림 별 매개 변수 또는 옵션 세트입니다. 일반적인 사용 컨텍스트는 HTTP 래퍼를 수정하는 것입니다. 이를 통해 간단한 네트워크 작업에서 CURL을 사용하지 않을 수 있습니다. readfile('php://input')

먼저, 형식의 배열 인 옵션 배열을 정의합니다 (사용 가능한 컨텍스트 옵션은 특정 래퍼에 따라 다름). 그런 다음 기본 컨텍스트를 반환하고 적용 할 옵션 배열을 수락하는 를 호출합니다. 명령문은 이러한 설정을 사용하여 컨텐츠를 얻습니다. 이 예에서는 컨텐츠가 요청 본문에 전송되므로 원격 스크립트는
<code class="language-php">Array
(
    [foo] => bar
    [name] => John
)</code>
를 사용하여 읽습니다. 우리는

를 사용하여 헤더에 액세스하고 다음을 얻을 수 있습니다 : php://memory php://temp 우리는 기본 컨텍스트 옵션을 수정했지만 단독으로 사용하기위한 대체 컨텍스트를 만들 수도 있습니다. php://filter readfile() 결론 file_get_contents() stream_get_contents() 우리는 실제 세계에서 흐름의 힘을 어떻게 사용합니까? 우리는 어디로 갈 수 있습니까? 우리가 볼 수 있듯이 스트림은 일부 또는 모든 파일 시스템 관련 기능을 공유하므로, 첫 번째 사용은 Heroku 또는 Appfog와 같은 Heroku 또는 AppFog를 사용한 PAAS 프로비저닝을위한 일련의 가상 파일 시스템 포장지입니다 . 거의 노력없이 응용 프로그램을 표준 호스팅 서비스에서 이러한 클라우드 서비스로 포트하고 이점을 누릴 수 있습니다. 또한 - 후속 게시물에 표시 될 것입니다. 사용자 정의 파일 형식 및 인코딩을 구현하는 응용 프로그램에 맞춤 포장지 및 필터를 작성할 수 있습니다.

(공간 제한으로 인해 FAQ 부품이 여기에서 생략됩니다.)

위 내용은 PHP 마스터 | PHP의 스트림 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.