Caso você tenha um file handle aberto (tipo resource do PHP) e queira saber qual o tamanho do arquivo, pode usar as funções ftell e fseek para determinar o valor desejado. Basta encaminhar o ponteiro do arquivo para o final dele e depois obter a posição.
A utilização da função filesize não ajuda, pois para usá-la é necessário passar o caminho do arquivo. Existem situações em que não temos acesso a esse caminho. Para isso criei esta nova função.
/** * Obtem o tamanho de um arquivo pelo seu file handle (resource). * A posicao do ponteiro do handle e' preservada. * @param resource File handle * @return int */ function filesizehandle($file) { if (!is_resource($file)) { throw new InvalidArgumentException('Invalid variable type. Resource expected.', 1); } $pos_inicial = ftell($file); fseek($file, 0, SEEK_END); $tamanho = ftell($file); fseek($file, $pos_inicial, SEEK_SET); return $tamanho; }
Uma utilização prática é quando você abre um arquivo temporário com a função tmpfile, realiza escrita e leitura no arquivo e, em determinado momento, precisa saber o tamanho do arquivo.
// Abrindo arquivo temporario $tmp = tmpfile(); // Manipulando o arquivo (rw) fwrite($tmp, 'teste'); // Obtendo o tamanho $tamanho = filesizehandle($tmp);
Observação: para reduzir o tamanho do arquivo, existe a função ftruncate.
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com