flock

(PHP 4, PHP 5, PHP 7)

flock锟斤拷锟斤拷锟斤拷询锟侥硷拷锟斤拷锟斤拷

说锟斤拷

flock ( resource $handle , int $operation [, int &$wouldblock ] ) : bool

flock() 锟斤拷锟斤拷执锟斤拷一锟斤拷锟津单的匡拷锟斤拷锟斤拷锟轿猴拷平台锟斤拷使锟矫的讹拷取/写锟斤拷模锟酵o拷锟斤拷锟斤拷锟襟部分碉拷 Unix 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟� Windows锟斤拷锟斤拷

锟斤拷 PHP 5.3.2锟芥本之前锟斤拷锟斤拷也锟结被 fclose() 锟酵放o拷锟节脚憋拷锟斤拷锟斤拷锟斤拷锟斤拷远锟斤拷锟斤拷茫锟斤拷锟�

PHP 支锟斤拷锟斤拷锟斤拷询锟斤拷式锟斤拷也锟斤拷锟斤拷说锟斤拷锟叫凤拷锟绞筹拷锟斤拷锟斤拷锟绞癸拷锟酵伙拷锟绞斤拷锟斤拷锟�, 锟斤拷锟斤拷锟斤拷锟斤拷锟结工锟斤拷锟斤拷锟斤拷锟斤拷全锟斤拷锟侥硷拷锟斤拷一锟斤拷锟斤拷惴斤拷锟斤拷锟� 默锟斤拷锟斤拷锟斤拷拢锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷取锟斤拷锟斤拷锟斤拷锟斤拷锟酵拷锟斤拷锟斤拷锟斤拷牡锟斤拷锟� LOCK_NB 选锟斤拷锟斤拷锟斤拷锟狡o拷锟节凤拷 Windows 平台锟较o拷锟斤拷

锟斤拷锟斤拷

handle

锟侥硷拷系统指锟诫,锟角碉拷锟酵碉拷锟斤拷 fopen() 锟斤拷锟斤拷锟斤拷 resource(锟斤拷源)锟斤拷

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($fpLOCK_EX)) {  // 锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷
    
ftruncate($fp0);      // truncate file
    
fwrite($fp"Write something here\n");
    
fflush($fp);            // flush output before releasing the lock
    
flock($fpLOCK_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($fpLOCK_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.

Warning

Assigning another value to handle argument in subsequent code will release the lock.

Warning

锟节诧拷锟街诧拷锟斤拷系统锟斤拷 flock() 锟皆斤拷锟教硷拷实锟街★拷锟斤拷锟斤拷一锟斤拷锟斤拷锟竭程凤拷锟斤拷锟斤拷 API锟斤拷锟斤拷锟斤拷 ISAPI锟斤拷时锟斤拷锟斤拷锟杰诧拷锟斤拷锟斤拷锟斤拷锟斤拷 flock() 锟斤拷锟斤拷锟斤拷锟侥硷拷锟斤拷锟斤拷为锟斤拷锟斤拷锟斤拷同一锟斤拷锟斤拷锟斤拷实锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟竭程碉拷 PHP 锟脚憋拷锟斤拷锟皆对革拷锟侥硷拷锟斤拷锟叫达拷锟斤拷

flock() 锟斤拷支锟街旧碉拷锟侥硷拷系统锟斤拷锟斤拷 FAT 锟皆硷拷锟斤拷锟斤拷锟斤拷锟斤拷系统锟斤拷锟斤拷耍锟斤拷嘶锟斤拷锟斤拷锟斤拷锟斤拷欠锟斤拷锟� FALSE锟斤拷锟斤拷锟斤拷锟角讹拷 Windows 98 锟矫伙拷锟斤拷说锟斤拷锟斤拷