芒果小站

  1. 全球最具业界良心的主机 - Linode

    毫无疑问,目前做得最好的主机供应商

    猛击这里查看

  2. 芒果小站目前使用的主机 - Linode

    客服响应快,随时退款,XEN 架构稳定

    猛击这里查看

  3. 最好的日本东京线路主机 - Linode

    可选弗里蒙特、达拉斯、亚特兰大、纽瓦克、伦敦、东京机房

    猛击这里查看

  • 1
  • 2
  • 3
切换到精简模式
1

file_put_contents 高并发与独占锁定

作者 芒果/分类 代码/发布于 2012-05-01 00:50

发现高并发访问时使用 file_put_contents 写入文件造成数据置空。

查看官方文档:

int file_put_contents ( string $filename , string $data [, int $flags [, resource $context ]] )

参数:

filename
    要被写入数据的文件名。
data
    要写入的数据。类型可以是 string,array 或者是 stream 资源(如上面所说的那样)。
flags
    flags 可以是 FILE_USE_INCLUDE_PATH,FILE_APPEND 和/或 LOCK_EX(获得一个独占锁定),然而使用 FILE_USE_INCLUDE_PATH 时要特别谨慎。
context
    一个 context 资源。

直接直至 flags 参数为 LOCK_EX 即可在高并发时获得一个独占锁定。

另外,flock 函数的也提供了文件锁定方法:

 <?php

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

if (flock($fp, LOCK_EX)) { // 进行排它型锁定
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // 释放锁定
} else {
echo "Couldn't lock the file !";
}

fclose($fp);

?> 

注意 flock() 需要一个文件指针。

版权所有,转载请注明出处。
转载自 <a href="http://mangguo.org/the-the-the-file_put_contents-high-concurrent-and-exclusive-lock/" title="file_put_contents 高并发与独占锁定" rel="bookmark">file_put_contents 高并发与独占锁定 | 芒果小站</a>
如果喜欢这篇文章,欢迎订阅芒果小站以获得最新内容。

已经有 1 条群众意见

  1. jysns /2012-05-09 08:10

    像博主学习哦 回应

    #1

下面我简单说几句