<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >flock</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Filesystem (Sistema de arquivos)" HREF="ref.filesystem.html"><LINK REL="PREVIOUS" TITLE="filetype" HREF="function.filetype.html"><LINK REL="NEXT" TITLE="fnmatch" HREF="function.fnmatch.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="refentry" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="function.filetype.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="function.fnmatch.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="function.flock" ></A >flock</H1 ><DIV CLASS="refnamediv" ><A NAME="AEN49186" ></A ><P > (PHP 3 >= 3.0.7, PHP 4, PHP 5)</P >flock -- Monitor de travamento de arquivos portátil</DIV ><DIV CLASS="refsect1" ><A NAME="AEN49189" ></A ><H2 >Descrição</H2 >bool <B CLASS="methodname" >flock</B > ( int handle, int operation [, int &wouldblock] )<BR ></BR ><P > O PHP suporta uma maneira portável de lock arquivos inteiros em uma advisory way (que significa que todos os programas acessando tem que usar o mesmo tipo de travamento ou não irá funcionar). </P ><P > <B CLASS="function" >flock()</B > opera em <CODE CLASS="parameter" >fp</CODE >, que tem que ser um ponteiro de arquivo aberto com sucesso. <CODE CLASS="parameter" >operacao</CODE > é um dos seguintes valores: </P ><P > <P ></P ><UL ><LI ><P > Para obter um lock compartilhado (leitura), utilize <CODE CLASS="parameter" >operation</CODE > como <TT CLASS="constant" ><B >LOCK_SH</B ></TT > (ou use 1 se a versão do PHP for anterior a 4.0.1). </P ></LI ><LI ><P > Para obter um lock exclusivo (gravação), utilize <CODE CLASS="parameter" >operacao</CODE > como <TT CLASS="constant" ><B >LOCK_EX</B ></TT > (ou use 2 se a versão do PHP for anterior a 4.0.1). </P ></LI ><LI ><P > Para retirar um lock (compartilhado ou exclusivo), uyilize <CODE CLASS="parameter" >operacao</CODE > como <TT CLASS="constant" ><B >LOCK_UN</B ></TT > (ou use 3 se a versão do PHP for anterior a 4.0.1). </P ></LI ><LI ><P > Se você não quer usar <B CLASS="function" >flock()</B > para bloquear enquanto travando, adicione <TT CLASS="constant" ><B >LOCK_NB</B ></TT > (4 se a versão do PHP for anterior a 4.0.1) a <CODE CLASS="parameter" >operacao</CODE >. </P ></LI ></UL > </P ><P > <B CLASS="function" >flock()</B > permite a você fazer um simples modelo leitura/gravação (reader/writer) que pode ser usado em virtualmente todas as plataformas (incluindo a maior parte dos Unixes e até mesmo Windows). O terceiro argumento opcional é usado como <TT CLASS="constant" ><B >TRUE</B ></TT > se a lock irá bloquear (EWOULDBLOCK errno condition). </P ><P > Retorna <TT CLASS="constant" ><B >TRUE</B ></TT > em caso de sucesso ou <TT CLASS="constant" ><B >FALSE</B ></TT > em falhas. </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN49234" ></A ><P ><B >Exemplo 1. <B CLASS="function" >flock()</B > example</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /><br />$fp </font><font color="#007700">= </font><font color="#0000BB">fopen</font><font color="#007700">(</font><font color="#DD0000">"/tmp/lock.txt"</font><font color="#007700">, </font><font color="#DD0000">"w+"</font><font color="#007700">);<br /><br />if (</font><font color="#0000BB">flock</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">LOCK_EX</font><font color="#007700">)) { </font><font color="#FF8000">// faca um lock exclusivo<br /> </font><font color="#0000BB">fwrite</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#DD0000">"escrevemos algo aqui\n"</font><font color="#007700">);<br /> </font><font color="#0000BB">flock</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">LOCK_UN</font><font color="#007700">); </font><font color="#FF8000">// libera o lock<br /></font><font color="#007700">} else {<br /> echo </font><font color="#DD0000">"Não pude travar o arquivo !"</font><font color="#007700">;<br />}<br /><br /></font><font color="#0000BB">fclose</font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">);<br /><br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><DIV CLASS="note" ><BLOCKQUOTE CLASS="note" ><P ><B >Nota: </B > Uma vez que <B CLASS="function" >flock()</B > requer um ponteiro de arquivo, você precisa utilizar um lock de arquivo especial para proteger i acessi a um arquivo ao qual você pretende truncar quando abrindo no modo de escrita (com um argumento "w" ou "w+" em <A HREF="function.fopen.html" ><B CLASS="function" >fopen()</B ></A >). </P ></BLOCKQUOTE ></DIV ><DIV CLASS="warning" ><P ></P ><TABLE CLASS="warning" BORDER="1" WIDTH="100%" ><TR ><TD ALIGN="CENTER" ><B >Atenção</B ></TD ></TR ><TR ><TD ALIGN="LEFT" ><P > <B CLASS="function" >flock()</B > não funcionará em NFS ou em qualquer outro sistema de arquivos em rede. Verifique a documentação do seu sistema operacional para mais detalhes. </P ><P > Na maior parte dos sistemas operacionais <B CLASS="function" >flock()</B > é implementada no nível do processo. Quando utilizando um servidor com uma API de multiprocessamento (como ISAPI), você não pode confiar em <B CLASS="function" >flock()</B > para proteger os arquivos contra outros scripts PHP rodando em threads paralelas da mesma instância do servidor! </P ><P > <B CLASS="function" >flock()</B > não é suportado em sistemas de arquivos antiquados como a <TT CLASS="literal" >FAT</TT > e seus derivados, e sempre retornará <TT CLASS="constant" ><B >FALSE</B ></TT > sob esses ambientes (especialmente para usuários do Windows 98). </P ></TD ></TR ></TABLE ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="function.filetype.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="function.fnmatch.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >filetype</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="ref.filesystem.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >fnmatch</TD ></TR ></TABLE ></DIV ></BODY ></HTML >