Olá pessoal, todos que trabalham com php já sabem que gravar dados em um arquivo PHP não é complicado. Normalmente a função utilizada é a fwrite(). Temos básicamente 3 passos para gravar dados em arquivo são eles:.
- Abrir o arquivo. Caso ele nao exita, ele deve ser criado.
- Gravar os dados no arquivo
- Fechar o arquivo
Exemplo:
<?php
$gravar=”teste”;//variavel a ser gravada
$fp = fopen(“caminho onde estar o arquivo”, ab);//criação //do ponteiro
fwrite($fp,$grava);// grava a string armazenada em $grava no arquivo //apontado por $fp
fclose($fp);
?>
Lê dados do arquivo tambem é relativamente simples. Temos básicamente 3 passos para ler dados em arquivo são eles:
- Abrir o arquivo. Caso ele nao exita, ele deve ser criado.
- Ler os dados no arquivo
- Fechar o arquivo
Exemplo:
<?php
$gravar=”teste”;//variavel a ser gravada
$fp = fopen(“caminho onde estar o arquivo”, ab);//criação //do ponteiro
while(!feof($fp)){
$dados=fgets($fp,999);
echo $dados.’<br />’;//imprimi os dados do arquivo
}
fclose($fp);
?>
Até aqui tudo bem, mas imagine uma situação onde dois usuários estejam tentando comprar um produto ao mesmo tempo. Não é surpresa nenhuma uma vez que o tráfego do seu web site aumenta consideravelmente. Agora pense seu um cliente chamar fopen() e começar a gravar e outro tambem chamar fopen() e começar a gravar? Qual será o resultado final do arquivo? O resultado será a primeira solicitação seguido da segunda ou virce-versa? A resposta depende do sistema operacional, mas ate então e impossivel saber.
Então você deve esta se perguntando como envitar isso? Logo te respondo com bloqueios de arquivo. No php e implementado com a função flock(). Essa função faz o bloqueio do arquivo onde o arquivo não mais pode ser compartilhado. Exemplo de como ficaria nosso código:
<?php
$gravar=”teste”;//variavel a ser gravada
$fp = fopen(“caminho onde estar o arquivo”, ab);//criação //do ponteiro
flock($fp, LOCK_EX);//faz o bloqueio
fwrite($fp,$grava);// grava a string armazenada em $grava no arquivo //apontado por $fp
flock($fp, LOCK_UN);//faz o desbloqueio
fclose($fp);
?>
// exemplo do segundo arquivo :
<?php
$gravar=”teste”;//variavel a ser gravada
$fp = fopen(“caminho onde estar o arquivo”, ab);//criação //do ponteiro
flock($fp, LOCK_EX);
while(!feof($fp)){
$dados=fgets($fp,999);
echo $dados.’<br />’;//imprimi os dados do arquivo
}
flock($fp, LOCK_UN);
fclose($fp);
?>
Nosso arquivo agora está mais seguro. Verdade, está mais seguro, mas imagine agora se dois scripts pedirem um bloqueio ao mesmo tempo? O resultado é uma condição de concorrência, onde processo agora competem por bloqueios mas é incerto por exemplo não temos condição de saber qual processo consiguirá ser bem sucedido, isso poderia causar mais problemas.
O que deve ser feito para resolver o problema de acesso concorrente é a utilização de um sistemas de gerenciamento de banco de dados. Os RDBMSs têm mecanismo predefinidos para lidar com acesso concorrente para que você, como um programador, não tenha dor de cabeça…:-)
Referências:
http://www.php.net/
PHP E MYSQL Desenvolvimento Web. Autores: LUKE WELLING & LAURA THOMSON..