php 生成唯一訂單號,檔案鎖

2021-07-12 04:57:43 字數 1171 閱讀 7839

從網上找到一篇生成訂單號的文章,但併發測試後發現會有重複的訂單號生成,所以嘗試加入檔案鎖,阻塞請求,來生成唯一訂單號。

自己經過ab工具併發1000個請求,不會生成重複的訂單號。

<?php

/* * 生成的格式是: 20130103000001 前面幾位為當前的日期,後面6位為系統自增長型別的編號

* 原理:

* 1.獲取當前日期格式化值;

* 2.讀取檔案,上次編號的值+1最為當前此次編號的值(記錄以檔案的形式儲存)

* (下月會接著這個編號)

*/class fileeverydayserialnumber

public function getorupdatenumber($current, $start)

else

}}class ioutil

$handle = fopen($filename,"r+");

flock($handle, lock_ex); // 進行排它型鎖定

if(filesize($filename) > 0)

else

$content = fread($handle,$readsize);

$arr = array(

'handle' => $handle,

'content' => $content,

);return $arr;

} public static function write_content($handle,$content, $filename) }

//測試**

//引數含義分別是日期後自增長數的位數, 儲存的檔名稱, 日期與自增長數的分割數

$obj = new fileeverydayserialnumber(6,"everydayserialnumber.dat",",");

$current_date = date("ymd");

$ordernum = $obj->getorupdatenumber($current_date,1);

//生成的訂單號儲存於pid.log檔案中

$handle = fopen("pid.log","a");

fwrite($handle,$ordernum."\n");

fclose($handle);

?>

PHP生成唯一訂單號

order number date ymd substr implode null,array map ord str split substr uniqid 7,13 1 0,8 簡單從內到外解析一下這個訂單號生成過程 1 date ymd 這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。...

PHP生成唯一訂單號

做 類專案經常需要生成唯一訂單號 方法一 return date ymd str pad mt rand 1,99999 5,0 str pad left 方法二 正在使用。return date ymd substr implode null,array map ord str split sub...

PHP生成唯一訂單號

利用php生成唯一訂單號,可用作於 下單,以及和支付寶等第三方支付進行對接 先來一段測試 i 10 while i echo php eol 測試結果見 來自ecshop訂單號生成函式 includes lib order.php檔案中的get order sn 得到新訂單號 return stri...