ホームページ >バックエンド開発 >PHPチュートリアル >PHP Streams (ストリーム) の詳細な導入と使用_PHP チュートリアル

PHP Streams (ストリーム) の詳細な導入と使用_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:53:38983ブラウズ

PHP Streams (ストリーム) の詳細な導入と使用法

この記事では、PHP Streams (ストリーム) の詳細な導入と使用法を主に紹介します。PHP Streams は、一般の開発者が使用することはほとんどないかもしれません。ファイル、ネットワーク、データ圧縮、その他のファイル操作の統合に使用され、これらのファイル操作に必要な共通関数インターフェイスのセットを提供します

PHP Streams は、通常の開発者がほとんど使用しない可能性がある組み込みのコア操作であり、ファイル、ネットワーク、データ圧縮、およびその他のファイルに似た操作を統合するために使用され、これらのファイルに似た操作に一連の共通関数インターフェイスを提供します。オペレーション。

ストリームはストリーミング動作を持つリソースオブジェクトであり、各ストリームオブジェクトはラッパークラスを持ちます。ストリームは :// 経由で参照できます。このうち、はパッケージングクラスの名前で、の内容はパッケージングクラスの構文によって指定されます。異なるパッケージングクラスの構文は異なります。

PHP にデフォルトで備わっている組み込みのパッケージング クラスを見てみましょう:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

print_r(stream_get_wrappers());

/*

配列

(

[0] => php

[1] => ファイル

[2] => グロブ

[3] => データ

[4] => http

[5] => ftp

[6] => zip

[7] => compress.zlib

[8] => https

[9] => ftps

[10] => ファー

)

*/

PHP でサポートされているプロトコルとラッパー クラスについては、PHP マニュアルを参照してください。

file_get_contents() を使用してデータを取得する次のコードを見てください。

?

実際、readfile('/path/to/somefile.txt') または readfile('file:///path/to/somefile.txt') は同等です。 PHP のデフォルトのパッケージング クラスは file:// であるためです。

マニュアルには、stream_register_wrapper() を通じて独自のラッパーを登録できることが明確に記載されています。マニュアルの例を確認してください。

OK、ここで PHP:// について簡単に紹介します。PHP:// は、PHP が IO ストリームを処理するために使用するラッパー クラスです (ここをクリックすると例が表示されます)。より強力な入出力ストリームには 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()を使ってファイル取得のタイムアウトを設定しているはずです:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/* /home/bar からローカル ファイルを読み取ります */

$localfile = file_get_contents ( "/home/bar/foo.txt" );

/* 上記と同じですが、FILE スキームに明示的に名前を付けます */

$localfile = file_get_contents ( "file:///home/bar/foo.txt" );

/* HTTP を使用して www.example.com からリモート ファイルを読み取ります */

$httpfile = file_get_contents ( "http://www.example.com/foo.txt" );

/* HTTPS を使用して www.example.com からリモート ファイルを読み取ります */

$httpsfile = file_get_contents ( "https://www.example.com/foo.txt" );

/* FTP を使用して ftp.example.com からリモート ファイルを読み取ります */

$ftpfile = file_get_contents ( "ftp://user:pass@ftp.example.com/foo.txt" );

/* FTPS を使用して ftp.example.com からリモート ファイルを読み取ります */

$ftpsfile = file_get_contents ( "ftps://user:pass@ftp.example.com/foo.txt" );

1

2

3

4

5

6

7

8

$opts = 配列(

'http'=>配列(

'メソッド'=>"GET",

'タイムアウト'=>60,

)

);

$context = stream_context_create($opts);

$html =file_get_contents('http://www.jb51.net', false, $context);

(2) フィルターについては、まず PHP に組み込まれているフィルターを見てみましょう:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

print_r(stream_get_filters());

/*

配列

(

[0] => Convert.iconv.*

[1] => mcrypt.*

[2] => mdecrypt.*

[3] => 文字列.rot13

[4] => string.toupper

[5] => string.to lower

[6] => string.strip_tags

[7] => 変換.*

[8] => 消費されました

[9] => デチャンク

[10] => zlib.*

)

*/

カスタム フィルターは、次のように stream_filter_register() および組み込みの php_user_filter を使用して作成できます。

?

PHP のストリーム関数のリストは次のように提供されます。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

/* フィルター クラスを定義します */

class strtoupper_filter extends php_user_filter {

関数フィルター ( $in 、 $out 、 & $consumed 、 $closed )

{

while ( $bucket = stream_bucket_make_writeable ( $in )) {

$bucket -> データ = strtoupper ( $bucket -> データ );

$消費 += $バケット ->

stream_bucket_append ( $out , $bucket );

}

PSFS_PASS_ON を返す ;

}

}

/* PHP でフィルターを登録します */

stream_filter_register ( "strtoupper" , "strtoupper_filter" )

or die( "フィルターの登録に失敗しました" );

$fp = fopen ( "foo-bar.txt" , "w" );

/* 登録したフィルターを開いたばかりのストリームにアタッチします */

stream_filter_append ( $fp , "strtoupper" );

fwrite ( $fp , "Line1n" );

fwrite ( $fp , "Word - 2n" );

fwrite ( $fp , "123n と同じくらい簡単" );

fclose ( $fp );

readfile ( "foo-bar.txt" );

/*

結果は以下の通りです:

LINE1

単語 - 2

123 個で簡単

*/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

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 関数: 登録されたソケットトランスポートリストを返します

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() 関数によって作成されたソケット接続を受け入れます

stream_socket_client 関数: ネットワークまたは UNIX ホストのソケット接続を開きます

stream_socket_enable_crypto 関数: 接続されたソケットのデータ暗号化をオンまたはオフにします

stream_socket_get_name 関数: ローカルまたはネットワークソケットの名前を取得します

stream_socket_pair 関数: 2 つの未区別のソケット データ ストリーム接続を作成します

stream_socket_recvfrom 関数: 接続されているかどうかに関係なく、Socket からデータを取得します

stream_socket_sendto 関数: 接続されているかどうかに関係なく、Socket にデータを送信します

stream_socket_server 関数: ネットワークまたは UNIX ソケットサーバーを作成します

stream_wrapper_restore 関数: 以前にログアウトしたデータ パッケージを復元します

stream_wrapper_unregister 関数: URL アドレス パッケージの登録を解除します

http://www.bkjia.com/PHPjc/1000117.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1000117.html技術記事 PHP Streams (ストリーム) の詳細な導入と使用法 この記事では、PHP Streams (ストリーム) の詳細な導入と使用法を主に紹介します。これは、一般の開発者が使用することはほとんどありません。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。