ストリームの基本

ストリームの使用方法は、ANSI stdio関数の使用と非常に似ています。 主な違いは、使用を開始するストリームを得る方法です。 多くの場合、ストリームのハンドルを得るために php_stream_open_wrapper()を使用します。 この関数の動作は、以下の例で示すようにfopenと非常によくにています。

例 44-1. PHPホームページを表示するための簡単なストリームの例

php_stream * stream = php_stream_open_wrapper("http://www.php.net", "rb", REPORT_ERRORS, NULL);
if (stream) {
    while(!php_stream_eof(stream)) {
        char buf[1024];
        
        if (php_stream_gets(stream, buf, sizeof(buf))) {
            printf(buf);
        } else {
            break;
        }
    }
    php_stream_close(stream);
}

以下の表にその他の一般的なANSI stdio関数と等価なストリーム関数を 示します。注記で除外されていない限り、関数の意味は同じです。

表 44-1. ANSI stdioと等価なストリームAPI関数

ANSI stdio関数PHP ストリーム関数注意
fopenphp_stream_open_wrapperストリームではパラメータが増えています
fclosephp_stream_close 
fgetsphp_stream_gets 
freadphp_stream_readパラメータnmembの値を1と仮定すると、プロトタイプはread(2)により似ることになります
fwritephp_stream_writeパラメータnmembの値を1と仮定すると、プロトタイプはwrite(2)により似ることになります
fseekphp_stream_seek 
ftellphp_stream_tell 
rewindphp_stream_rewind 
feofphp_stream_eof 
fgetcphp_stream_getc 
fputcphp_stream_putc 
fflushphp_stream_flush 
putsphp_stream_putsfputsではなく、putsと同じ意味
fstatphp_stream_statストリームはより情報の多いstat構造体を有しています