php专区

 首页 > php专区 > PHP进阶 > 高并发 > 说说PHP中file_put_contents并发性问题解决方案整理

说说PHP中file_put_contents并发性问题解决方案整理

分享到:
【字体:

在使用file_put_contents时会碰到并发性问题了,对于这个问题我们有多种解决方案了,其实锁是小编比较喜欢的解决办法了,当然也有其它办法,具体如下。


解决 办法一,file_put_contents 高并发与独占锁定

 

发现高并发访问时使用 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 函数的也提供了文件锁定方法:


$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // 进行排它型锁定
fwrite($fp, "Write something heren");
flock($fp, LOCK_UN); // 释放锁定
} else {
echo "Couldn't lock the file !";
}
fclose($fp);

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

 

方法二,file_put_contents() 存在高并发问题,Smarty中处理方式如下。




分享到:
详解:使用pthreadsPHP扩展PHP真正多线程...
PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程。多线程在处理重复性的循环任务,能够大大缩短程序执行时间。   我之前的文章中说过,大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增...
PHP系统性能优化原则良好的系统设计
这里记载的是我觉得在做优化工作时应该秉承的原则与步骤,不是具体的优化方法(优化方法google有很多)。 一提到性能优化,就会听到双引号、单引号、三等号之类的,我认为如果按着这个去做,就有点舍本逐末了。 做优化之前,先说一下我对系统设计目标的理解 第一位:可运行。这是最重要的,应该没有什...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……