PHP文件锁定写入实例解析

yipeiwu_com5年前PHP代码库

本文以实例讲述了PHP文件写入方法,以应对多线程写入,具体代码如下:

function file_write($file_name, $text, $mode='a', $timeout=30){ 
  $handle = fopen($file_name, $mode); 
  while($timeout>0){ 
    if ( flock($handle, LOCK_EX) ) { // 排它性的锁定
      $timeout--; 
      sleep(1); 
    } 
  } 
  if ( $timeout > 0 ){ 
    fwrite($handle, $text.'\n'); 
    flock($handle, LOCK_UN); 
    fclose($handle); //释放锁定操作
    return true; 
  } 
  return false; 
}

其中flock(int $handle, int $operation)函数操作的 handle 必须是一个已经打开的文件指针。

operation 可以是以下值之一:

要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。

此外, fclose()用来释放锁定操作,在代码执行完毕时调用。

相关文章

关于Sphinx创建全文检索的索引介绍

全文检索的索引创建过程一般有以下几步:1、一些需要创建索引的文档(Documents)。 2、将原文档传给分词组件(Tokenizer)。 3、将得到的词元(Token)传给语言处理组件...

PHP基于反射获取一个类中所有的方法

本文实例讲述了PHP基于反射获取一个类中所有的方法。分享给大家供大家参考,具体如下: 当我们使用一个类时既没有源码也没有文档时(尤其是php扩展提供的类,比如mysqli,Redis类)...

PHP获取http请求的头信息实现步骤

PHP手册提供了现成的函数: getallheaders (PHP 4, PHP 5) getallheaders — Fetch all HTTP request headers 说明...

phpfpm的作用和用法

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP 5.3.3之前的php来说,是一个补丁包 ,旨在将...

PHP生成可点击刷新的验证码简单示例

本文实例讲述了PHP生成可点击刷新的验证码。分享给大家供大家参考,具体如下: html文件: <html> <head> <title>验...