PHP 스트림(stream) 상세 소개 및 use_php 예시

WBOY
풀어 주다: 2016-05-16 20:15:39
원래의
1417명이 탐색했습니다.

PHP Streams는 일반 개발자가 거의 사용하지 않는 내장 핵심 작업으로, 파일, 네트워크, 데이터 압축 및 기타 파일과 유사한 작업을 통합하는 데 사용되며 이러한 파일에 대한 공통 기능 인터페이스 세트를 제공합니다. -같은 작업.

스트림은 스트리밍 동작을 포함하는 리소스 개체이며, 각 스트림 개체에는 래퍼 클래스가 있습니다. 스트림은 ://을 통해 참조할 수 있습니다. 그 중 은 패키징 클래스의 이름이고 의 내용은 패키징 클래스의 구문에 따라 지정됩니다.
PHP가 기본적으로 가지고 있는 내장 패키징 클래스를 살펴보겠습니다.

print_r(stream_get_wrappers());
/*
Array
(
  [0] => php
  [1] => file
  [2] => glob
  [3] => data
  [4] => http
  [5] => ftp
  [6] => zip
  [7] => compress.zlib
  [8] => https
  [9] => ftps
  [10] => phar
)
*/
로그인 후 복사

PHP에서 지원하는 프로토콜과 래퍼 클래스에 대한 PHP 매뉴얼을 살펴보세요.
file_get_contents()를 사용하여 데이터를 얻는 다음 코드를 살펴보세요.

/* Read local file from /home/bar */
 $localfile = file_get_contents ( "/home/bar/foo.txt" );
 
 /* Identical to above, explicitly naming FILE scheme */
 $localfile = file_get_contents ( "file:///home/bar/foo.txt" );
 
 /* Read remote file from www.example.com using HTTP */
 $httpfile  = file_get_contents ( "http://www.example.com/foo.txt" );
 
 /* Read remote file from www.example.com using HTTPS */
 $httpsfile = file_get_contents ( "https://www.example.com/foo.txt" );
 
 /* Read remote file from ftp.example.com using FTP */
 $ftpfile  = file_get_contents ( "ftp://user:pass@ftp.example.com/foo.txt" );
 
 /* Read remote file from ftp.example.com using FTPS */
 $ftpsfile  = file_get_contents ( "ftps://user:pass@ftp.example.com/foo.txt" );
로그인 후 복사

사실 readfile('/path/to/somefile.txt') 또는 readfile('file:///path/to/somefile.txt')은 동일합니다. PHP의 기본 패키징 클래스는 file://이기 때문입니다.

매뉴얼에는 stream_register_wrapper()를 통해 자신만의 래퍼를 등록할 수 있다고 명시되어 있습니다. 매뉴얼에서 예제를 확인할 수 있습니다.
자, 다음은 IO 스트림을 처리하기 위해 PHP에서 사용하는 래퍼 클래스인 PHP://에 대한 간략한 소개입니다(예제를 보려면 여기를 클릭하세요). PHP를 통해 더 강력한 입력 및 출력 스트림에 액세스할 수 있습니다://:

php://stdin: cli가 스크립트를 실행할 때 키보드 입력을 얻는 데 사용되는 것과 같은 PHP 프로세스의 해당 입력 스트림에 액세스합니다.
php://stdout: PHP 프로세스의 해당 출력 스트림에 액세스합니다.
php://stderr: PHP 프로세스의 해당 오류 출력에 액세스합니다.
php://input: 요청된 원시 데이터에 액세스하는 읽기 전용 스트림입니다.
php://output: 쓰기 전용 데이터 스트림으로, print 및 echo와 동일한 방식으로 출력 영역에 기록됩니다.
php://fd: 지정된 파일 설명자에 대한 직접 액세스를 허용합니다. 예제 php://fd/3은 파일 설명자 3을 나타냅니다.
php://memory: 임시 데이터를 읽고 쓸 수 있습니다. 데이터를 메모리에 저장합니다.
php://temp: 위와 동일합니다. 메모리 양이 미리 정의된 제한(기본값은 2MB)에 도달하면 임시 파일에 저장됩니다.
php://filter: 필터.

PHP는 컨텍스트와 필터를 통해 패키징 클래스를 수정하고 향상할 수도 있습니다.
(1) 예를 들어 컨텍스트와 관련하여 PHP는 stream_context_create()를 사용하여 파일 가져오기에 대한 시간 초과를 설정해야 합니다.

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'timeout'=>60,
  )
);
$context = stream_context_create($opts);
$html =file_get_contents('http://www.jb51.net', false, $context);
로그인 후 복사

(2) 필터 필터와 관련하여 먼저 PHP에 내장된 필터가 무엇인지 살펴보겠습니다.

print_r(stream_get_filters());
/*
Array
(
  [0] => convert.iconv.*
  [1] => mcrypt.*
  [2] => mdecrypt.*
  [3] => string.rot13
  [4] => string.toupper
  [5] => string.tolower
  [6] => string.strip_tags
  [7] => convert.*
  [8] => consumed
  [9] => dechunk
  [10] => zlib.*
)
*/
로그인 후 복사

다음과 같이 stream_filter_register() 및 내장 php_user_filter를 통해 사용자 정의 필터를 생성할 수 있습니다.

/* Define our filter class */
class strtoupper_filter extends php_user_filter {
  function filter ( $in , $out , & $consumed , $closing )
  {
    while ( $bucket = stream_bucket_make_writeable ( $in )) {
      $bucket -> data = strtoupper ( $bucket -> data );
      $consumed += $bucket -> datalen ;
      stream_bucket_append ( $out , $bucket );
    }
    return PSFS_PASS_ON ;
  }
}
 
/* Register our filter with PHP */
stream_filter_register ( "strtoupper" , "strtoupper_filter" )
or die( "Failed to register filter" );
 
$fp = fopen ( "foo-bar.txt" , "w" );
 
/* Attach the registered filter to the stream just opened */
stream_filter_append ( $fp , "strtoupper" );
 
fwrite ( $fp , "Line1\n" );
fwrite ( $fp , "Word - 2\n" );
fwrite ( $fp , "Easy As 123\n" );
 
fclose ( $fp );
 
 
readfile ( "foo-bar.txt" );
/*
结果如下:
LINE1
WORD - 2
EASY AS 123
*/

로그인 후 복사

PHP의 스트림 함수 목록은 다음과 같습니다.

stream_bucket_append函数:为队列添加数据 
stream_bucket_make_writeable函数:从操作的队列中返回一个数据对象
stream_bucket_new函数:为当前队列创建一个新的数据
stream_bucket_prepend函数:预备数据到队列 
stream_context_create函数:创建数据流上下文
stream_context_get_default函数:获取默认的数据流上下文
stream_context_get_options函数:获取数据流的设置
stream_context_set_option函数:对数据流、数据包或者上下文进行设置
stream_context_set_params函数:为数据流、数据包或者上下文设置参数
stream_copy_to_stream函数:在数据流之间进行复制操作
stream_filter_append函数:为数据流添加过滤器
stream_filter_prepend函数:为数据流预备添加过滤器
stream_filter_register函数:注册一个数据流的过滤器并作为PHP类执行
stream_filter_remove函数:从一个数据流中移除过滤器
stream_get_contents函数:读取数据流中的剩余数据到字符串
stream_get_filters函数:返回已经注册的数据流过滤器列表
stream_get_line函数:按照给定的定界符从数据流资源中获取行
stream_get_meta_data函数:从封装协议文件指针中获取报头/元数据
stream_get_transports函数:返回注册的Socket传输列表
stream_get_wrappers函数:返回注册的数据流列表
stream_register_wrapper函数:注册一个用PHP类实现的URL封装协议
stream_select函数:接收数据流数组并等待它们状态的改变
stream_set_blocking函数:将一个数据流设置为堵塞或者非堵塞状态
stream_set_timeout函数:对数据流进行超时设置
stream_set_write_buffer函数:为数据流设置缓冲区
stream_socket_accept函数:接受由函数stream_ socket_server()创建的Socket连接
stream_socket_client函数:打开网络或者UNIX主机的Socket连接
stream_socket_enable_crypto函数:为一个已经连接的Socket打开或者关闭数据加密
stream_socket_get_name函数:获取本地或者网络Socket的名称
stream_socket_pair函数:创建两个无区别的Socket数据流连接
stream_socket_recvfrom函数:从Socket获取数据,不管其连接与否
stream_socket_sendto函数:向Socket发送数据,不管其连接与否
stream_socket_server函数:创建一个网络或者UNIX Socket服务端
stream_wrapper_restore函数:恢复一个事先注销的数据包
stream_wrapper_unregister函数:注销一个URL地址包
로그인 후 복사

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!