從網上找到一篇生成訂單號的文章,但併發測試後發現會有重複的訂單號生成,所以嘗試加入檔案鎖,阻塞請求,來生成唯一訂單號。
自己經過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...