|
A primeira função que se
deve conhecer para trabalhar com ficheiros
é a que cria uma ligação
entre o script e o ficheiro propriamente
dito:
int fopen( string
ficheiro, string modo [, int usa_include_path]
);
Esta função devolve um ponteiro
para um ficheiro, que é utilizado
noutras funções para lidar
com ficheiros. O primeiro parâmetro,
ficheiro, é uma string que indica
o local do ficheiro a ser aberto, aqui vai
a primeira dica: não utilize o modo
de referência do windows, como c:\www\ficheiro.txt,
pois não irá funcionar num
servidor linux! Evite também ler
e gravar ficheiros fora do directório
onde o teu site está hospedado, às
vezes torna-se difícil criar um directório
fora do directório do site, e, se
um dia quiseres transferir o teu site para
uma outra máquina, pode acontecer
que te esqueças daquele directório
isolado. Vamos supor que o site tem um subdirectório
"tmp" e que tem dentro um ficheiro
novidades.txt. Para abrir o ficheiro usamos:
<?php
$fd = fopen( "tmp/novidades.txt",
"r" );
...
?>
Note que mesmo que este script seja executado
em windows ele irá funcionar. Excelente!
Nada melhor que programar com uma linguagem
que funciona em vários sistemas operativos
sem alterações!
O segundo parâmetro informa o PHP
que o ficheiro deve ser aberto so para leitura,
os modos possíveis podem ser:
r - so leitura, coloca o ponteiro
no início do ficheiro
r+ - leitura e gravação,
coloca o ponteiro no início do
ficheiro
w - so gravação,
limpa o ficheiro (deixa-o com 0 bytes)
e coloca o ponteiro no início do
ficheiro. Se o ficheiro não existir,
tenta criá-lo.
w+ - leitura e gravação,
limpa o ficheiro (deixa-o com 0 bytes)
e coloca o ponteiro no início do
ficheiro. Se o ficheiro não existir,
tenta criá-lo
a - so gravação,
coloca o ponteiro no final do ficheiro.
Se o ficheiro não existir, tenta
criá-lo.
a+ - leitura e gravação,
limpa o ficheiro (deixa-o com 0 bytes)
e coloca o ponteiro no final do ficheiro.
Se o ficheiro não existir, tenta
criá-lo
Existe ainda a opção "b"
que pode ser utilizada com os modos (sozinha
não funciona!), esta opção
indica que o ficheiro deve ser tratado como
binário em vez de texto, ou seja,
se o programa for lidar com imagens em vez
de um ficheiro de texto comum. É
de vital importância no windows para
ler imagens, ou caso contrário o
programa não irá funcionar.
Como o Linux e Unix não fazem diferença
entre um ficheiro de texto e um binário,
essa opção não terá
nenhum efeito, portanto, se o seu programa
for trabalhar com imagens, não custa
nada adicionar esta opção.
(programas multiplataforma são excelentes!)
AVISO: Como no windows (95/98/CE/ME)
não existe permissão de acesso
a ficheiros os programas funcionarão
como desejado, podemos criar ficheiros,
acede-los, excluí-los e muito mais.
No Linux começam a surgir alguns
problemas, normalmente os ficheiros e directórios
de um servidor de Internet são de
um utilizador e o servidor http (apache,
por exemplo) corre como um outro utilizador,
o php corre com o mesmo utilizador do servidor
http, portanto se este utilizador não
tiver permissão para gravar num directório,
não será possível criar
os ficheiros pelo php, nem alterá-los.
O terceiro parâmetro é opcional,
e se seu valor for 1, o php irá procurar
nos directórios informados na configuração
"include_path" do php.ini.
Se a função fopen falhar
ao abrir ou ao criar o ficheiro, ela retorna
false. Note que se for utilizado o parâmetro
"r"(somente leitura) ou "r+"
e o ficheiro não existir, a função
fopen não irá tentar criá-lo,
simplesmente retornará um erro, e
mostrará um aviso no browser do utilizador.
Caso não seja muito bom mostrar esse
tipo de erro para o utilizador (toda a gente
que vir essa mensagem vai querer ler esse
ficheiro directamente no browser), utilize
o @ antes da função e confira
o resultado:
<?php
$fd = @fopen( "tmp/novidades.txt",
"r" ) or die( "ops, avise
o webmaster, que está a faltar um
ficheiro no servidor");
...
?>
Mesmo que tenhas a certeza que este ficheiro
está por lá, usa este método,
pois nem sempre as coisas são como
esperamos.
|