Basico de Fluxos de Dados

Usar fluxos de dados é muito parecido com usar a funções da stdio ANSI. A diferença principal é como você obtem um handle de fluxo para começar. Na maioria dos casos, você usará php_stream_open_wrapper() para obter esse handle. Essa função funciona de forma análoga à fopen, como pode ser visto no exemplo abaixo:

Exemplo 63-1. Exemplo simples de fluxo de dados que mostra a página do 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);
}

A tabela abaixo mostra os fluxos equivalentes para as funções mais comuns da stdio ANSI. A não ser que esteja comentado o contrário, as semânticas das funções são idênticas.

Tabela 63-1. Funções equivalentes à stdio ANSI na API de Fluxos de Dados

Função stdio ANSIFunção de Fluxo de Dados do PHPComentário
fopenphp_stream_open_wrapperA API inclui parâmetros adicionais
fclosephp_stream_close 
fgetsphp_stream_gets 
freadphp_stream_readO parâmetro nmemb tem o valor de 1, então o protótipo parece mais com read(2)
fwritephp_stream_writeO parâmetro nmemb tem o valor de 1, então o protótipo parece mais com 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_putsMesma semântica de puts, NÂO de fputs
fstatphp_stream_statA API tem uma estrutura stat mais rica