File: flock.xml

package info (click to toggle)
php-doc 20061001-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 45,764 kB
  • ctags: 1,611
  • sloc: xml: 502,485; php: 7,645; cpp: 500; makefile: 297; perl: 161; sh: 141; awk: 28
file content (149 lines) | stat: -rw-r--r-- 4,879 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.11 $ -->
<!-- splitted from ./en/functions/filesystem.xml, last change in rev 1.2 -->
  <refentry id="function.flock">
   <refnamediv>
    <refname>flock</refname>
    <refpurpose>Portable advisory file locking</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>bool</type><methodname>flock</methodname>
      <methodparam><type>resource</type><parameter>handle</parameter></methodparam>
      <methodparam><type>int</type><parameter>operation</parameter></methodparam>
      <methodparam choice="opt"><type>int</type><parameter role="reference">wouldblock</parameter></methodparam>
     </methodsynopsis>
    <simpara>
     PHP supports a portable way of locking complete files in an
     advisory way (which means all accessing programs have to use the
     same way of locking or it will not work).
    </simpara>
    <note>
     <para>
      <function>flock</function> is mandatory under Windows.
     </para>
    </note>
    <simpara>
     <function>flock</function> operates on <parameter>handle</parameter>
     which must be an open file
     pointer. <parameter>operation</parameter> is one of the following
     values:
    </simpara>
    <para>
     <itemizedlist>
      <listitem>
       <simpara>
         To acquire a shared lock (reader), set
         <parameter>operation</parameter> to <constant>LOCK_SH</constant> (set to 1 prior to
         PHP 4.0.1).
       </simpara>
      </listitem>
      <listitem>
       <simpara>
         To acquire an exclusive lock (writer), set
         <parameter>operation</parameter> to <constant>LOCK_EX</constant> (set to 2 prior to
         PHP 4.0.1).
       </simpara>
      </listitem>
      <listitem>
       <simpara>
         To release a lock (shared or exclusive), set
         <parameter>operation</parameter> to <constant>LOCK_UN</constant> (set to 3 prior to
         PHP 4.0.1).
       </simpara>
      </listitem>
      <listitem>
       <simpara>
         If you don't want <function>flock</function> to block while
         locking, add <constant>LOCK_NB</constant> (4 prior to PHP 4.0.1) to
         <parameter>operation</parameter>.
       </simpara>
      </listitem>
     </itemizedlist>
    </para>
    <simpara>
     <function>flock</function> allows you to perform a simple
     reader/writer model which can be used on virtually every platform
     (including most Unix derivatives and even Windows).  The optional third
     argument is set to &true; if the lock would block (EWOULDBLOCK
     errno condition). The lock is released also by <function>fclose</function>
     (which is also called automatically when script finished).
    </simpara>
    <simpara>
      &return.success;
    </simpara>
    <para>
     <example>
      <title><function>flock</function> example</title>
      <programlisting role="php">
<![CDATA[
<?php

$fp = fopen("/tmp/lock.txt", "w+");

if (flock($fp, LOCK_EX)) { // do an exclusive lock
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // release the lock
} else {
    echo "Couldn't lock the file !";
}

fclose($fp);

?>
]]>
      </programlisting>
     </example>
    </para>
    <note>
     <para>
      Because <function>flock</function> requires a file pointer, you may have
      to use a special lock file to protect access to a file that you intend
      to truncate by opening it in write mode (with a "w" or "w+" argument to
      <function>fopen</function>).
     </para>
    </note>
    <warning>
     <para>
      <function>flock</function> will not work on NFS and many other networked
      file systems. Check your operating system documentation for more
      details.
     </para>
     <para>
      On some operating systems <function>flock</function> is implemented at
      the process level. When using a multithreaded server API like ISAPI you
      may not be able to rely on <function>flock</function> to protect files
      against other PHP scripts running in parallel threads of the same server
      instance!
     </para>
     <para>
      <function>flock</function> is not supported on antiquated filesystems like
      <literal>FAT</literal> and its derivates and will therefore always
      return &false; under this environments (this is especially true for
      Windows 98 users).
     </para>
    </warning>
   </refsect1>
  </refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->