`
lizhiqiang1
  • 浏览: 13009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

PHP flock

阅读更多
  PHP flock() 函数锁定或释放文件。
  若成功,则返回 true。若失败,则返回 false。
 flock() 操作的 file 必须是一个已经打开的文件指针。
  lock 参数可以是以下值之一:
  要取得共享锁定(读取的程序),将 lock 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。 要取得独占锁定(写入的程序),将 lock 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。 要释放锁定(无论共享或独占),将 lock 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。 如果不希望 flock() 在锁定时堵塞,则给lock 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。
  提示:可以通过 fclose() 来释放锁定操作,代码执行完毕时也会自动调用。
  注释:由于 flock() 需要一个文件指针, 因此可能不得不用一个特殊的锁定文件来保护打算通过写模式打开的文件的访问(在 fopen() 函数中加入 "w" 或 "w+")。
<?php
$file = fopen("test.txt","w+");
// 排它性的锁定 
if (flock($file,LOCK_EX)) 
{ 
fwrite($file,"Write something");
// release lock flock($file,LOCK_UN);
} 
else 
{
 echo "Error locking file!";
} fclose($file);
?>

flock在官方文档里的解释是:flock() 允许你执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),请将可选的第三个参数设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。
简单来说,就是对一个文件进行锁定操作,使得多进程访问该文件时受到限制,从而防止冲突。
举个例子,
<?php
$file = fopen("test.txt","w+");
if (flock($file,LOCK_EX))
  {
  fwrite($file,"Write something");
  flock($file,LOCK_UN);
  }
else
  {
  echo "Error locking file!";
  }
fclose($file);
?>

1.这段代码的意思是,以读写方式打开文件test.txt,当一个用户调用该php页面时,即对test.txt文件进行操作,那么就会执行flock($file,LOCK_EX)代码,即将test.txt文件进行独占锁定(该文件只能由该用户进行读写操作),那么如果有其他新的用户想访问该文件,就会被阻塞,直到前者关闭文件(释放锁定)。
2.如果将代码改成flock($file,LOCK_EX+LOCK_NB)表示锁定时直接返回错误,那么如果有新的用户访问该文件,就会输出“Error locking file!”
3.该函数的语法是flock(file,lock,block),其中file必需。规定要锁定或释放的已打开的文件。
lock 必需。规定要使用哪种锁定类型。
block可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程
分享到:
评论

相关推荐

    PHP flock 文件锁详细介绍

    flock (PHP 4, PHP 5) flock — 轻便的咨询文件锁定 说明 bool flock ( int $handle , int $operation [, int &$wouldblock ] ) PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)...

    PHP文件锁函数flock()详细介绍

    主要介绍了PHP文件锁函数flock()详细介绍,本文着重对flock函数的作用和参数讲解,以及使用需要注意的问题,需要的朋友可以参考下

    php使用flock阻塞写入文件和非阻塞写入文件的实例讲解

    php $file = fopen&#40;"test.txt","w+"&#41;; $t1 = microtime(TRUE); if (flock($file,LOCK_EX)) { sleep(10); fwrite($file,"Write something"); flock($file,LOCK_UN); echo "Ok locking file!"; } else { ...

    PHP使用flock实现文件加锁的方法

    主要介绍了PHP使用flock实现文件加锁的方法,实例分析了flock文件锁的使用技巧,需要的朋友可以参考下

    lock:PHP 中简单的面向对象文件锁管理

    锁 标准的 PHP flock函数很难测试。 这个库为flock提供了一个现代的、面向对象的包装器。安装将以下内容添加到您的composer.json : { " require " : { " benconstable/lock " : " ~1.0 " }}用法 &lt;?php$ lock = ...

    PHP基于文件锁解决多进程同时读写一个文件问题示例

    首先PHP是支持进程的而不支持多线程(这个先搞清楚了),如果是对于文件操作,其实你只需要给文件加锁就能解决,不需要其它操作,PHP的flock已经帮你搞定了。 用flock在写文件前先锁上,等写完后解锁,这样就实现了...

    httpRequest.class.php:适用于一般HTTP请求PHP cURL包装器

    httpRequest.class.php 在PHP中轻松执行常规HTTP请求。 要求 php5 php5-curl 用法 初始化 ... 发出POST请求 $ req -&gt; setPOST ( $ rawPostData );... 'Gecko/20080530 Firefox/2.0.0.14 Flock/1.2.1' ); 从

    模拟flock实现文件锁定

    主要提供了一种思路。 $lock0和$lock1就是文件...php // Lock a file, timing out if it takes too long. function lock ($lock, $tries) { $lock0 = “.{$lock}0”; $lock1 = “.{$lock}1”; 

    php脚本守护进程原理与实现方法详解

    本文实例讲述了php脚本守护...4. flock -xn 加锁 实例: 要执行代码:index.php &lt;?php set_time_limit(0); //死循环 while(1) { $message = '1111111' . \n; error_log($message); sleep(5); } #/tmp/lock

    lock:锁库提供PHP代码的序列化执行

    可以选择将flock() , ext-redis , ext-pdo_mysql , ext-pdo_sqlite , ext-pdo_pgsql或ext-memcached用作锁的后端。 请参阅下面的示例。 如果将ext-redis用于锁定并配置为使用igbinary进行序列化或使用lzf进行...

    php 木马的分析(加密破解)

    分析可以知道,此木马经过了base64进行了编码,然后进行压缩。虽然做了相关的保密措施,可是php代码要执行,其最终要生成php源代码,所以写出如下php... } flock($filenum,LOCK_EX); $file_data=fwrite($filenum,$data)

    php写入文件不覆盖的实例讲解

    file_put_contents():向文件中写入内容并且不覆盖之前的内容。 步骤: 1、新建文件 2、声明要写入内容的文件 ... 您可能感兴趣的文章:php解决crontab定时任务不能写入文件问题的方法分析php使用flock阻塞

    ninja-mutex:PHP的Mutex实现

    它支持不同的适配器(flock,memcache,mysql,redis等),因此您可以根据需要进行设置。 所有适配器(如果设置正确)都可以在多服务器环境中使用-换句话说,锁在Web服务器之间共享。用法互斥体首先,您需要选择一...

    PHP文件锁定写入实例解析

    本文以实例讲述了PHP文件写入方法,以应对多线程写入,具体代码如下: ... if ( flock($handle, LOCK_EX) ) { // 排它性的锁定 $timeout--; sleep(1); } } if ( $timeout &gt; 0 ){ fwrite($handle, $text.'

    php多用户读写文件冲突的解决办法

    但在PHP中,flock似乎工作的不是那么好!在多并发情况下,似乎是经常独占资源,不即时释放,或者是根本不释放,造成死锁,从而使服务器的cpu占用很高,甚至有时候会让服务器彻底死掉。好像在很多li

    PHP简单实现记录网站访问量功能示例

    本文实例讲述了PHP简单实现记录网站访问量功能。分享给大家供大家参考,具体如下: ...if (flock($fp,LOCK_EX)){ while (($buffer=fgets($fp,1024))!=false){ $content=$content.$buffer; } $data=unserialize

Global site tag (gtag.js) - Google Analytics