A primeira e mais comum, que o PHP herdou da linguagem C, é através do comando fopen. Onde são passados quatro parâmetros (sendo que o terceiro e o quarto parâmetro quase nunca são utilizados, por isso não irei citá-los): o primeiro parâmetro obrigatório é uma string com o caminho e nome do arquivo que será manipulado, e o segundo é o método de abertura do arquivo, que irá variar de acordo com a funcionalidade do programa que está sendo desenvolvido. A função irá retornar um ponteiro (recurso) para o arquivo que será manipulado, e esse ponteiro será utilizado nas outras funções de manipulação de arquivo.
Exemplo de manipulação com fopen():
<?php // O símbolo "@" é para suprimir os possíveis erros $fp = @fopen("arquivo.txt", "r"); // Testa se o arquivo foi aberto corretamente if (!$fp) { echo "Nao foi possivel abrir o arquivo."; exit(1); } // o função feof irá retornar TRUE quando o ponteiro // $fp estiver no final do arquivo while (!feof($fp)) { // A função fgets lê 4096 bytes do ponteiro // $fp ou até chegar no final da linha. $buffer = fgets($fp, 4096); // Imprime na tela o linha echo $buffer; } // Fecha o ponteiro do arquivo e evita // que o mesmo seja corrompido fclose($fp); ?>
A segunda forma e também a mais fácil é através da função file que recebe como argumento três valores, sendo que os dois últimos são utilizados em casos específicos e por isso não os abordarei aqui. O primeiro argumento passado é o arquivo ou recurso que será aberto. O valor retornado pela função é um array onde cada índice do array é correspondente a uma linha do arquivo.
Exemplo de manipulação com file()
<?php // a função abre o arquivo e retorna em forma de array $arquivo_linhas = file("arquivo.txt"); // loop em todas as linhas do arquivo foreach ($arquivo_linhas as $linha) { // Imprime a linha echo $linha; } ?>
Nos dois exemplos o arquivo "arquivo.txt" será aberto, e o seu conteúdo será exibido através do comando echo. A principal diferença entre os dois é que ao abrir o arquivo com o fopen, apenas o valor retornado pela função fgets estará na memória, ou seja, 4096 bytes (4Kb) por iteração do loop; já com a função file a variável $arquivo_linhas terá todo o conteúdo do arquivo, consumindo muito mais memória. Talvez em um arquivo pequeno essa diferença não seja percebida, mas com um arquivo maior a diferença de performance é claramente percebida. É bom lembrar que se o arquivo aberto for muito grande talvez não seja possível ser aberto em virtude da configuração memory_limit do arquivo de configuração do PHP (php.ini).
Cada função tem um propósito diferente, sendo que em alguns casos uma pode ser mais adequada que a outra, a intenção do post foi dar uma explicação genérica utilizando as duas funções e mostrar a principal diferença com relação ao funcionamento de cada uma.
Espero que seja útil!!! t+
Esse artigo e outros podem ser encontrados em ITATUX
Comentários (1)
-
|27-03-09 10:57 Hector - Muito Bom
É realmente isso é bastante interessante.
Eu estou a desenvolver uma classe de template, quando comparei a minha com a do fórum PHPbb. A diferença foi imensa, cerca de 10 segundos para uma exibição de 10.000 registros.
Porém eu carregava o arquivo com o file_get_contents que transforma o arquivo inteiro em string. Acho que talvez, caso eu abrir por fopen, e fazer tudo o que tiver que fazer linha a linha a performance aumente bastante. Afinal o arquivo e todas as suas concatenações não ficarão na memória.
Bastante interessante. Me ajudou bastante, e a explicação bem clara.
Bom, quero apenas reforcar, que caso o arquivo seja pequeno, e você não vá fazer nada, creio que o uso do file_get_contents chega a ser melhor, pois você não precisa criar nenhum laço para exibí-lo.
Powered by !JoomlaComment 4.0 beta1


























