(PHP 4, PHP 5, PHP 7)
flock — 锟斤拷锟斤拷锟斤拷询锟侥硷拷锟斤拷锟斤拷
$handle
, int $operation
[, int &$wouldblock
] ) : boolflock() 锟斤拷锟斤拷执锟斤拷一锟斤拷锟津单的匡拷锟斤拷锟斤拷锟轿猴拷平台锟斤拷使锟矫的讹拷取/写锟斤拷模锟酵o拷锟斤拷锟斤拷锟襟部分碉拷 Unix 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� Windows锟斤拷锟斤拷
锟斤拷 PHP 5.3.2锟芥本之前锟斤拷锟斤拷也锟结被 fclose() 锟酵放o拷锟节脚憋拷锟斤拷锟斤拷锟斤拷锟斤拷远锟斤拷锟斤拷茫锟斤拷锟�
PHP 支锟斤拷锟斤拷锟斤拷询锟斤拷式锟斤拷也锟斤拷锟斤拷说锟斤拷锟叫凤拷锟绞筹拷锟斤拷锟斤拷锟绞癸拷锟酵伙拷锟绞斤拷锟斤拷锟�, 锟斤拷锟斤拷锟斤拷锟斤拷锟结工锟斤拷锟斤拷锟斤拷锟斤拷全锟斤拷锟侥硷拷锟斤拷一锟斤拷锟斤拷惴斤拷锟斤拷锟�
默锟斤拷锟斤拷锟斤拷拢锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟斤拷锟酵拷锟斤拷锟斤拷锟斤拷牡锟斤拷锟� LOCK_NB
选锟斤拷锟斤拷锟斤拷锟狡o拷锟节凤拷 Windows 平台锟较o拷锟斤拷
handle
operation
operation
锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷值之一锟斤拷
LOCK_SH
取锟矫癸拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷取锟侥筹拷锟津)★拷
LOCK_EX
取锟矫讹拷占锟斤拷锟斤拷锟斤拷写锟斤拷某锟斤拷锟�
LOCK_UN
锟酵凤拷锟斤拷锟斤拷锟斤拷锟斤拷锟桔癸拷锟斤拷锟斤拷占锟斤拷锟斤拷
锟斤拷锟斤拷锟较o拷锟� flock() 锟斤拷锟斤拷锟斤拷时锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
LOCK_NB
锟斤拷Windows 锟较伙拷锟斤拷支锟街o拷锟斤拷
wouldblock
锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥伙拷锟斤拷EWOULDBLOCK
锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷拢锟斤拷锟斤拷锟窖★拷牡锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷岜伙拷锟斤拷锟轿� TRUE
锟斤拷锟斤拷Windows 锟较诧拷支锟街o拷
锟缴癸拷时锟斤拷锟斤拷 TRUE
锟斤拷 锟斤拷锟斤拷锟斤拷失锟斤拷时锟斤拷锟斤拷 FALSE
锟斤拷
锟芥本 | 说锟斤拷 |
---|---|
5.3.2 | 锟斤拷锟侥硷拷锟斤拷源锟斤拷锟斤拷乇锟绞憋拷锟斤拷锟斤拷远锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭拷锟斤拷锟斤拷锟斤拷锟斤拷侄锟斤拷锟斤拷小锟� |
4.0.1 |
锟斤拷锟斤拷锟剿筹拷锟斤拷 LOCK_XXX锟斤拷
之前锟斤拷锟斤拷锟绞癸拷锟� 1 锟斤拷锟斤拷 LOCK_SH 锟斤拷2 锟斤拷锟斤拷
LOCK_EX 锟斤拷3 锟斤拷锟斤拷LOCK_UN 锟斤拷4 锟斤拷锟斤拷
LOCK_NB 锟斤拷
|
Example #1 flock() 锟斤拷锟斤拷
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // 锟酵凤拷锟斤拷锟斤拷
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
?>
Example #2 flock() 使锟斤拷 LOCK_NB
选锟斤拷
<?php
$fp = fopen('/tmp/lock.txt', 'r+');
/* Activate the LOCK_NB option on an LOCK_EX operation */
if(!flock($fp, LOCK_EX | LOCK_NB)) {
echo 'Unable to obtain lock';
exit(-1);
}
/* ... */
fclose($fp);
?>
Note:
flock() uses mandatory locking instead of advisory locking on Windows. Mandatory locking is also supported on Linux and System V based operating systems via the usual mechanism supported by the fcntl() system call: that is, if the file in question has the setgid permission bit set and the group execution bit cleared. On Linux, the file system will also need to be mounted with the mand option for this to work.
Note:
锟斤拷锟斤拷 flock() 锟斤拷要一锟斤拷锟侥硷拷指锟诫, 锟斤拷丝锟斤拷懿锟斤拷貌锟斤拷锟揭伙拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟侥硷拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷通锟斤拷写模式锟津开碉拷锟侥硷拷锟侥凤拷锟绞o拷锟斤拷 fopen() 锟斤拷锟斤拷锟叫硷拷锟斤拷 "w" 锟斤拷 "w+"锟斤拷锟斤拷
Note:
May only be used on file pointers returned by fopen() for local files, or file pointers pointing to userspace streams that implement the streamWrapper::stream_lock() method.
Assigning another value to handle
argument in
subsequent code will release the lock.
锟节诧拷锟街诧拷锟斤拷系统锟斤拷 flock() 锟皆斤拷锟教硷拷实锟街★拷锟斤拷锟斤拷一锟斤拷锟斤拷锟竭程凤拷锟斤拷锟斤拷 API锟斤拷锟斤拷锟斤拷 ISAPI锟斤拷时锟斤拷锟斤拷锟杰诧拷锟斤拷锟斤拷锟斤拷锟斤拷 flock() 锟斤拷锟斤拷锟斤拷锟侥硷拷锟斤拷锟斤拷为锟斤拷锟斤拷锟斤拷同一锟斤拷锟斤拷锟斤拷实锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟竭程碉拷 PHP 锟脚憋拷锟斤拷锟皆对革拷锟侥硷拷锟斤拷锟叫达拷锟斤拷
flock() 锟斤拷支锟街旧碉拷锟侥硷拷系统锟斤拷锟斤拷 FAT
锟皆硷拷锟斤拷锟斤拷锟斤拷锟斤拷系统锟斤拷锟斤拷耍锟斤拷嘶锟斤拷锟斤拷锟斤拷锟斤拷欠锟斤拷锟� FALSE
锟斤拷锟斤拷锟斤拷锟角讹拷 Windows 98 锟矫伙拷锟斤拷说锟斤拷锟斤拷