Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Augusto

[Resolvido] Comportamento estranho de f-open()...

Recommended Posts

Durante todos esses anos, pouquíssimas vezes trabalhei com File Streams e talvez por isso nunca tenha vivenciado todas as particularidades do campo.

 

Não me entendam mal, eu sei fazer, claro, mas me aconteceu um fato inusitado.

 

Segundo o manual, abrindo uma Stream em Modo w+, a estamos abrindo para leitura e gravação, tal qual r+, porém aqui, se o arquivo não existir ele será criado.

 

Perfeito, mas em algum lugar diz que a "bi-habilidade" (palavra bonita, hein :P ) desse modo de abertura não funciona no mesmo recurso?

 

Esse fragmento de código:

 

$tmpFile = tempnam( sys_get_temp_dir(), 'Foo' );

$fp = fopen( $tmpFile, 'w+' );

fwrite( $fp, 'My name is Earl' );

$output = NULL;

do {

   $output .= fread( $fp, 4096 );

} while( ! feof( $fp ) );

var_dump( $output );

Era suposto de gravar My name is Earl (seriado maneiro :grin: ) no arquivo temporário criado por tempnam().

 

Logo em seguida eu deveria conseguir ler esse arquivo para a variável $output através da mesma stream aberta para a operação de escrita, afinal eu defini o modo w+

 

Mas não é o que ocorre. Eu recebo uma string vazia.

 

Agora, alterando a definição de $tmpFile para o path completo (a fim de não criar outro), abrir uma nova stream, com outro fopen() e tentar ler esse arquivo em consigo, óbvio.

 

Mas não é isso que deveria ocorrer, afinal, eu havia aberto a stream em modo leitura e gravação.

 

file_get_contents(), que abre, lê e fecha, funciona tranquilamente justamente porque a cada leitura uma nova stream é aberta, lida e fechada.

 

Alguém me explica essa sacanagem? <_<

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, a prática leva a perfeição. Como eu pouco utilizo File Streams, à noite e com sono pra piorar, nem me toquei no fato do ponteiro estar indo para o final.

 

Grato pela explicação. Tadinho do PHP, quase levou a culpa de novo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, a prática leva a perfeição. Como eu pouco utilizo File Streams, à noite e com sono pra piorar, nem me toquei no fato do ponteiro estar indo para o final.

 

Grato pela explicação. Tadinho do PHP, quase levou a culpa de novo...

 

Sem problemas fera, acontece.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.