1. Abrir Arquivo

Primeiro abre-se o arquivo, depois faz a gravação e por último fecha-se o arquivo.
Função fopen:

$arquivo = fopen(PATH,MODO)

$arquivo: variável que armazenará o ponteiro do arquivo.
PATH: caminho do arquivo.
Modo: modo como será aberto o arquivo, podendo ser:
ModoDescrição
wAbre o arquivo apenas para escrita; coloca o ponteiro do arquivo no começo do arquivo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
w+Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no começo e diminui (trunca) o tamanho do arquivo para zero. Se o arquivo não existe, tenta criá-lo.
rAbre o arquivo somente para leitura; coloca o ponteiro de escrita no começo do arquivo. [Retorna um erro caso o arquivo não exista e não tenta cria-lo.]
r+Abre para leitura e escrita; coloca o ponteiro de escrita no começo do arquivo. [Retorna um erro caso o arquivo não exista e não tenta cria-lo.]
aAbre o arquivo somente para escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existir, tenta criá-lo.
a+Abre o arquivo para leitura e escrita; coloca o ponteiro do arquivo no final. Se o arquivo não existir, tenta criá-lo.
xCria e abre o arquivo para escrita somente; coloca o ponteiro no início do arquivo. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE, gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais.
x+Cria e abre um arquivo para escrita e leitura; coloca o ponteiro do arquivo no início. Se o arquivo já existe, a chamada a fopen() irá falhar, retornando FALSE, gerando um erro nível E_WARNING. Se o arquivo não existe, tenta criá-lo. Esta opção é suportada no PHP 4.3.2 e posteriores, e somente funciona em arquivos locais.
b
binário. Utilizado em sistemas que diferenciam arquivos de texto de binários (windows)
 
2. Gravar em um arquivo
Para gravar num arquivo aberto use as funções fwrite() e fputs().
fputs() é um alias para fwrite. A sintaxe de fwrite () é:
fwrite (ARQUIVO,STRING,COMPRIMENTO)

ARQUIVO: é um ponteiro para um arquivo aberto com fopen().
STRING: é a string a ser gravada no arquivo
COMPRIMENTO: é o número de bytes a gravar. Se este parâmetro for fornecido, fwrite gravará a string até alcançar seu final ou até ter gravado COMPRIMENTO bytes.

Exemplo:
fwrite.txt (arquivo texto), pode-se utilizar o bloco de notas do Windows para criá-lo, foi digitado Linha velha.


Código fonte: fwrite.php
<?php
// Abre o arquivo fwrite.txt
// "a" representa que o arquivo é aberto para ser escrito
$fp = fopen("fwrite.txt", "a");
// Escreve "Linha nova" no fwrite.txt
$escreve = fwrite($fp, "<br>Linha nova<br>");
// Fecha o arquivo
fclose($fp);
echo readfile("fwrite.txt");
?>

Resultado:
Linha velha
Linha nova
30
Obs: a cada execução do código fonte será acescentado a frase Linha nova na próxima linha do arquivo de texto.

3. Fechar um arquivo
fclose(ARQUIVO)

ARQUIVO: é um ponteiro para arquivo aberto com fopen().

4. Ler um arquivoPara ler um arquivo usa-se uma das seguintes funções:

4.1. fgets(ARQUIVO,TAMANHO)
É usada para ler uma linha do arquivo.
ARQUIVO: é um ponteiro para um arquivo aberto com fopen().
TAMANHO: é o tamanho da linha em bytes. Ela lê a linha até encontrar um caractere de nova linha (/n), encontrar um fim de arquivo (EOF) ou ter lido TAMANHO - 1 bytes. Para ler todas as linhas de um arquivo você deve fornecer um código de loop semelhante a:
Exemplo:
fgets.txt (arquivo a ser aberto)



Código fonte: fgets.php

<?php
$fp = fopen("fgets.txt", "r");
while(!feof($fp)){
    $linha = fgets($fp,1000);
    echo $linha.'<br>';
  }
   fclose($fp);
?>
Resultado:
Linha 1
Linha 2
Linha 3
Obs: a funçaõ feof() verifica se o fim o arquivo foi atingido.

4.2. getss(ARQUIVO,TAMANHO,TAGS)
É parecida com fgets(), a diferença é que fgetss() retira as tags HTML. Isto é interessante quando você está lendo um arquivo escrito por outra pessoa ou lendo uma entrada do usuário. Uma tag HTML mal colocada no código pode alterar a aparência da página.
TAGS: são as tags HTML permitidas.

4.3. fgetcsv(ARQUIVO,TAMANHO,SEPARADOR,CERCADOR)
É utilizada para dividir linhas do arquivo quando você usar um caracter separador para separar os itens ou campos do registro. Ela é interessante quando se trabalha com arquivos gerados por aplicações que criam arquivos de dados separados por um caracter padrão, como é o caso das planilhas. O resultado é retornado num array.
SEPARADOR: é o caractere separador (o padrão é a vírgula).
CERCADOR: é o caractere que envolve os campos (o padrão é o caractere de aspas duplas ").

Exemplo de leitura e impressão de todo o conteúdo de um arquivo CSV:

- Criar uma tabela no BrOffice e salvar como fgetcsv.csv

- Abertura do arquivo fgetcsv.csv no bloco de notas do Windows para simples constatação do formato.
1,2,3,4
5,6,7,8

Código fonte: fgetcsv.php
<?php
$row = 1;
$handle = fopen ("fgetcsv.csv","r");
while ($data = fgetcsv ($handle, 1000, ",")) {
    $num = count ($data);
    print "<p> $num (quatro) campos na linha $row: <br>";
    $row++;
    for ($c=0; $c < $num; $c++) {
        print $data[$c] . "<br>";
    }
}
fclose ($handle);
?>

Resultado:

4 (quatro) campos na linha 1:
1
2
3
4

4 (quatro) campos na linha 2:
5
6
7
8

Obs 1:
count( ): conta o número de elementos de um array, ou propriedades de um objeto. Exemplo:
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
?>
// $result == 3
Obs 2: compare o resultado e abertura do arquivo fgetcsv.csv, há quatro elementos na primeira linha e quatro elementos na segunda linha, apenas a escrita apresenta os dados em linhas separadas, no arquivo texto há apenas duas linhas.

4.4. readfile(ARQUIVO)
Para ler todo o arquivo de uma vez.
ARQUIVO: caminho do arquivo a ser lido. readfile() retorna o número de bytes lidos e exibe o arquivo na saída padrão.
Exemplo:
textoum.txt (arquivo)
linha 1 <br>
linha 2 <br>
linha 3 <br>

Código fonte: redfile.php
<?php
echo readfile("textoum.txt");
?>
Resultado:
linha 1
linha 2
linha 3
42

4.5. fpassthru(ARQUIVO)
Lê até o fim do arquivo (EOF) do ponteiro de arquivo dado e imprime os resultados para a buffer de saída.
ARQUIVO: é um ponteiro aberto anteriormente com fopen(). A função lê do ponteiro até o final do arquivo e, então, fecha o arquivo. Sendo assim, pode-se usar fpassthru() para ler todo o arquivo ou uma parte dele. Ela retorna true ou false dependendo ou não do sucesso na leitura do arquivo.
O ponteiro de arquivo tem que ser válido e apontar para um arquivo aberto com sucesso por fopen(), popen() ou fsockopen(). Você pode precisar chamar rewind() para reiniciar o ponteiro do arquivo para o início do arquivo caso você já tenha escrito dados no arquivo. O arquivo é fechado quando fpassthru() acaba de ler (deixando handle sem utilidade).
Se você somente quiser jogar o conteúdo de um arquivo para o buffer de saída, sem primeiro modificar ou procurar por um detalhe qualquer, você pode usar a função readfile(), que vai economizar uma chamada a função fopen().

Obs: Quando utilizando fpassthru() em um arquivo binário em sistemas Windows, você precisa verificar se abriu o arquivo em modo binário, acrescentando um b no modo informado na chamada de fopen().

Exemplo:
<?php
$pont = fopen("imagens/fpassthru.jpg", 'rb');
header("Content-Type: image/jpeg");
fpassthru($pont);
exit;
?>
Resultado:


4.6. file(ARQUIVO)
É parecida com readfile()
ARQUIVO: é o caminho do arquivo a ser lido. Ela lê todo o arquivo e o retorna no formato de um array. Cada linha é um elemento do array.

Exemplo:
<?php
$lines = file("textoum.txt");
foreach ($lines as $line_num => $line) {
    echo "Linha #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}
?>
Resultado:
Linha #0 : linha 1 <br>
Linha #1 : linha 2 <br>
Linha #2 : linha 3 <br>


4.7. file_get_contents(ARQUIVO)
De forma semelhante a anterior, lê todo o arquivo passado, porém o retorna como uma string.
Exemplo 1 (lendo um arquivo): Primeiro pega-se todo o conteudo do arquivo e coloca-o dentro da variavel, depois é só fazer a leitura:
Arquivo: fgets.txt
Linha 1<br>
Linha 2<br>
Linha 3<br>

Arquivo: filegetcontents.php
<?php
//pegar o conteudo do arquivo .txt e coloca na variavel $conteudo
$conteudo = file_get_contents("fgets.txt");
//exibir na tela
echo $conteudo;
?>
Resultado:

Linha 1
Linha 2
Linha 3

Exemplo 2:
Arquivo: http://localhost/php/teste.html
Esta pagina é um teste!
Tabela 1:
2
4
7
9

Arquivo: filegetcontents2.php
<?php
//pegar o conteudo da pagina web escolhida e em seguida exibimos ela
//ini_set("allow_url_fopen", TRUE), Esta opção permite o acesso a objetos URL como arquivos.
ini_set("allow_url_fopen", TRUE);
$conteudo = file_get_contents("http://localhost/php/teste.html");
echo $conteudo;
?>
Resultado:
Esta pagina é um teste!
Tabela 1:
2
4
7
9

4.7. file_put_contents(ARQUIVO, CONTEUDO, FILE_APPEND)

A função file_put_contents() salva o conteúdo de uma string em um arquivo de texto local, caso não exista, será criado.
CONTEUDO: pode ser um array ou uma string.
FILE_APPEND: parâmetro utilizado caso queira acrescentar uma nova linha (CONTEUDO) no arquivo já existente.
Retorna o número de bytes escritos no arquivo, ou false, em caso de erro.

Exemplo 1:
Arquivo: fileputcontents.php
<?php
$linhas = array ('Segunda linha.<br>','Terceira linha.<br>','Quarta linha.<br>');
$bytes = file_put_contents('arquivo.txt',$linhas);
if ($bytes)
  echo "$bytes bytes escritos<br>";
else
  echo "Erro!";
echo file_get_contents("arquivo.txt");
?>
Resultado:
54 bytes escritos
Segunda linha.
Terceira linha.
Quarta linha.

Exemplo 2 (acrescentando uma linha ao arquivo já existente):
- Será itilizado o anquivo anterior, arquivo.txt e logo em seguida será acrescentado mais uma linha:
Arquivo: fileputcontents2.php
<?php
file_put_contents("arquivo.txt", "Esta frase é o conteúdo (nova linha) do arquivo de nome arquivo.txt", FILE_APPEND);
echo file_get_contents("arquivo.txt");
?>

Resultado:
Segunda linha.
Terceira linha.
Quarta linha.
Esta frase é o conteúdo (nova linha) do arquivo de nome arquivo.txt

4.8. fread(ARQUIVO,BYTES)
Lê uma quantidade específica de bytes do arquivo:
ARQUIVO: é um ponteiro aberto com fopen() e BYTES é o número de bytes a ser lido. A função lê até o número dado de bytes ou até o fim do arquivo, o que ocorrer primeiro.

4.9. fgetc(ARQUIVO)
Lê um caracter por vez
ARQUIVO: é um ponteiro de arquivo aberto com fopen(). Normalmente não é interessante ler todo o arquivo utilizando fgetc() pois ela retorna também o caractere de fim de arquivo (EOF). É melhor ler todo o arquivo usando outra função, porém, se você quiser ler todo um arquivo e exibí-lo numa página HTML, você pode usar um trecho de código parecido com este:

while(!feof($arquivo))
  {
    $caracter = fgetc($arquivo);
    if(!feof($arquivo))
      echo ($caracter=="\n"?'<br>':$caracter);
  }
observe o segundo teste de fim de arquivo, ele é necessário pois, como foi dito acima, fgetc() retorna também o caractere de fim de arquivo. Observe também a utilização da instrução condicional (CONDIÇÃO ? VERDADEIRO : FALSO). Ela foi usada para emitir uma quebra de linha no HTML cada vez que o caracter de nova linha (\n) for lido.

Verificando se um arquivo existe
4.10. file_exists(ARQUIVO)
Verifica se um arquivo existe.
ARQUIVO: é o caminho do arquivo a ser verificado.

4.11. filesize(ARQUIVO)
ARQUIVO :é o caminho do arquivo. O tamanho do arquivo é retornado em bytes.
Verifica o tamanho do arquivo

4.12. unlink(ARQUIVO)
Apagando um arquivo.
ARQUIVO: é o caminho do arquivo.

4.13. rewind(ARQUIVO)
Direcionando o ponteiro para o início do arquivo
ARQUIVO: é um ponteiro de arquivo aberto com fopen().

4.14. ftell(ARQUIVO)
Verifica quantos bytes foram lidos
ARQUIVO: é um ponteiro de arquivo aberto com fopen().

4.15. fseek(ARQUIVO,BYTES,ORIGEM)
Move o ponteiro pelo arquivo
ARQUIVO: é um ponteiro de arquivo aberto com fopen()
BYTES é o número de bytes a ser deslocado o ponteiro
ORIGEM: é o ponto inicial a partir de onde o ponteiro vai movimentar-se. Pode ser SEEK_SET para início do arquivo, SEEK_CUR para a poisição atual do ponteiro ou SEEK_END para o final do arquivo.

4.16. flock(ARQUIVO,OPERAÇÃO)
Bloquear um arquivo
Sempre que um arquivo é aberto é interessante bloqueá-lo para que outro usuário não esteja acessando o arquivo ao mesmo tempo. Para isto use flock()
ARQUIVO: é um ponteiro de arquivo aberto com fopen() e OPERAÇÃO é o tipo de bloqueio de acordo com a tabela abaixo:
LOCK_SH bloqueio de leitura. O arquivo pode ser compartilhado com outros usuários.
LOCK_EX bloqueio de gravação. O arquivo não pode ser compartilhado
LOCK_UN libera bloqueio existente
LOCK_NB impede bloqueio ao tentar adquirir um bloqueio

5. Como retornar o caminho (path) dos arquivos no servidor PHP
Para retornar o caminho (path) dos arquivos no servidor com Apache/PHP é muito simples.
Exemplo:
Arquivo: retornar.php
<?php
// Retorna o domínio do servidor
echo $_SERVER['SERVER_NAME'] . "<br />";      ----------   localhost
// Retorna o path do arquivo onde está sendo executado
echo $_SERVER['PHP_SELF'] . "<br />";     ----------   /php/retornar.php
// Retorna o path da pasta onde está sendo executado
echo $_SERVER['DOCUMENT_ROOT'] . "<br />";     ----------   C:/wamp/www/
// Retorna o path do arquivo onde está sendo executado o script
echo $_SERVER['SCRIPT_FILENAME'] . "<br />";     --------   C:/wamp/www/php/retornar.php
// Retorna o path e nome do arquivo que está executando
echo $_SERVER['SCRIPT_NAME'] . "<br />";     ---------   /php/retornar.php
 
echo "<hr >";     ----------   produzirá um traço horizontal
$path = $_SERVER['SCRIPT_FILENAME'];
$path_parts = pathinfo($path);
// retorna o path absoluto do diretório no servidor
echo $path_parts['dirname'] . "<br />";     ----------   C:/wamp/www/php

// retorna o nome do arquivo com extensão
echo $path_parts['basename'] . "<br />";     ----------  retornar.php
// retorna a extensão do arquivo
echo $path_parts['extension'] . "<br />";     ----------   php
// retorna o nome do arquivo sem extensão
echo $path_parts['filename'] . "<br />";     ----------   retornar
?>
Resultado:
localhost
/php/retornar.php
C:/wamp/www/
C:/wamp/www/php/retornar.php
/php/retornar.php

C:/wamp/www/php
retornar.php
php
retornar

6. Arquivos Remotos
Nas funções que trabalham com arquivos, é possível utilizar URLs para acessar arquivos em outros servidores na Web ou no próprio servidor.

Lendo
$f = fopen(“http://www.php.net”,”r”);
 if (!$f){
 echo “Erro ao abrir a URL.<br>”;
exit;
}
while (!feof($f)){
 $s = fgets($f,256);
 echo $s;
}
fclose($f);
Escrevendo
$f = fopen(“ftp://user:senha@site”,”w”);
 if (!$f){
 echo “Erro ao abrir a URL.<br>”;
exit;
}

else{
 fputs($f,”texto a ser escrito”);
 fputs($f,”mais texto a ser escrito”);
 fputs($f,”mais texto a ser escrito”);
 fputs($f,”mais texto a ser escrito”);
 fputs($f,”mais texto a ser escrito”);
 fclose;
}