日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功

發布時間:2024/9/20 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方案一:

function writeData($filepath, $data) { $fp = fopen($filepath,'a'); do{ usleep(100); }while (!flock($fp, LOCK_EX)); $res = fwrite($fp, $data."\n"); flock($fp, LOCK_UN); fclose($fp); return $res; }

本文出自 “我知” 博客,請務必保留此出處http://iknow.blog.51cto.com/6209466/1058876

方案二:

function writeData($path, $mode,$data,$max_retries = 10) { $fp = fopen($path, $mode); $retries = 0; do{ if ($retries > 0) { usleep(rand(1, 10000)); } $retries += 1;}while (!flock($fp, LOCK_EX) and $retries<= $max_retries); //判斷是否等于最大重試次數,是則返回falseif ($retries == $max_retries) { return false; } fwrite($fp, "$data "); flock($fp, LOCK_UN); fclose($fp); return true; }

來自http://www.xuejiehome.com/blread-1670.html

方案三:

function write_file($filename, $content) {$lock = $filename . '.lck';$write_length = 0;while(true) {if( file_exists($lock) ) {usleep(100);} else {touch($lock);$write_length = file_put_contents($filename, $content, FILE_APPEND);break;}}if( file_exists($lock) ) {unlink($lock);}return $write_length; }

?

flock

(PHP 4, PHP 5, PHP 7)

flock?—?輕便的咨詢文件鎖定

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

flock()?允許執行一個簡單的可以在任何平臺中使用的讀取/寫入模型(包括大部分的 Unix 派生版和甚至是 Windows)。

在 PHP 5.3.2版本之前,鎖也會被?fclose()?釋放(在腳本結束后會自動調用)。

PHP 支持以咨詢方式(也就是說所有訪問程序必須使用同一方式鎖定, 否則它不會工作)鎖定全部文件的一種輕便方法。 默認情況下,這個函數會阻塞到獲取鎖;這可以通過下面文檔中?LOCK_NB?選項來控制(在非 Windows 平臺上)。

參數

handle

文件系統指針,是典型地由?fopen()?創建的?resource(資源)。

operation

operation?可以是以下值之一:

  • LOCK_SH取得共享鎖定(讀取的程序)。
  • LOCK_EX?取得獨占鎖定(寫入的程序。
  • LOCK_UN?釋放鎖定(無論共享或獨占)。

如果不希望?flock()?在鎖定時堵塞,則是?LOCK_NB(Windows 上還不支持)。

wouldblock

如果鎖定會堵塞的話(EWOULDBLOCK 錯誤碼情況下),可選的第三個參數會被設置為?TRUE。(Windows 上不支持)

返回值

成功時返回?TRUE, 或者在失敗時返回?FALSE。

Example #1?flock()?例子

<?php$fp = fopen("/tmp/lock.txt", "r+");if (flock($fp, LOCK_EX)) { // 進行排它型鎖定ftruncate($fp, 0); // truncate filefwrite($fp, "Write something here\n");fflush($fp); // flush output before releasing the lockflock($fp, LOCK_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($fp, LOCK_EX | LOCK_NB)) {echo 'Unable to obtain lock';exit(-1); }/* ... */fclose($fp); ?>

Note:

由于?flock()?需要一個文件指針, 因此可能不得不用一個特殊的鎖定文件來保護打算通過寫模式打開的文件的訪問(在?fopen()?函數中加入 "w" 或 "w+")。

Warning:

在部分操作系統中?flock()?以進程級實現。當用一個多線程服務器 API(比如 ISAPI)時,可能不可以依靠?flock()?來保護文件,因為運行于同一服務器實例中其它并行線程的 PHP 腳本可以對該文件進行處理。

flock()?不支持舊的文件系統,如?FAT?以及它的派生系統。因此,此環境下總是返回?FALSE(尤其是對 Windows 98 用戶來說)。

http://php.net/manual/zh/function.flock.php


來源:http://www.cnblogs.com/gengyi/p/6399206.html

總結

以上是生活随笔為你收集整理的请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。