ストリーム関数をご存じですか?PHP 4.3.0から導入された機能で、汎用の ファイル関数を利用して、ファイル以外の各リソースやストリームを扱える ようにするための関数群です。今回は、ストリーム関数を使って外部URLの 読み込みや、gzip形式で圧縮されたファイルを読み書きする例を紹介してい きましょう。

ひょっとしたら、既にストリーム関数を使ったことがあるかもしれません。 たとえば、外部のWebサイトの情報を取り出したいときには、httpラッパーを 使って以下のように記述できます。

$html = file_get_contents("http://www.asial.co.jp/");

これで、URLがhttp://www.asial.co.jp/のHTMLを、$html変数に格納できます。 もちろんfile_get_contents関数以外にも、fopen関数なども使用できます。 では次に、zlib形式の圧縮ファイルを操作する例を見てみましょう。zlibラッ パーを使うと、gzip形式(拡張子gz)のファイルを操作できます。

ファイルを読み込むには、以下のように記述します。

$contents = file_get_contents("compress.zlib:///home/masahiro/test.gz");

これで、$contentsに/home/masahiro/test.gzの内容が読み込まれます。 同じように、文字列を圧縮してファイルに保存したい場合は、

$fp = fopen("compress.zlib:///home/masahiro/test.gz", "w");
fputs($fp, $contents);
fclose($fp);

と記述することで、$contentsの内容をファイルに保存できます。

PHPの構築時にオプション指定が必要なものもありますが、expectやSSH、FTP、 HTTPSプロトコルなどもサポートされています。また、独自にストリームを 定義することも可能です。

他にも、いろいろなラッパーが用意されています。ラッパーの一覧は、 http://www.phppro.jp/phpmanual/php/wrappers.htmlをご覧いただくと良い でしょう。

また、ストリーム関数の詳細は、 http://www.phppro.jp/phpmanual/php/ref.stream.htmlを参照してください。