麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

php生成唯一數字id的方法匯總

2024-05-04 23:40:28
字體:
來源:轉載
供稿:網友

我們在平時的項目中,經常會遇到要使用php生成唯一數字id的環境,網上查了很多資料,其實還是有一定的可能性重復的,所以今天在這里分享下,個人最近研究這個問題的所得。

關于生成唯一數字ID的問題,是不是需要使用rand生成一個隨機數,然后去數據庫查詢是否有這個數呢?感覺這樣的話有點費時間,有沒有其他方法呢?

當然不是,其實有兩種方法可以解決。

1. 如果你只用php而不用數據庫的話,那時間戳+隨機數是最好的方法,且不重復;

2. 如果需要使用數據庫,即你還需要給這個id關聯一些其他的數據。那就給MySQL數據庫中的表的id一個AUTO_INCREMENT(自增)屬性,每次插入一條數據時,id自動+1,然后使用mysql_insert_id()或LAST_INSERT_ID()返回這個自增后的id。

當然,這個問題已經有現成的解決方法了,使用php uuid擴展就能完美解決這個問題,這個擴展能生成唯一的完全數字簽名。。

如果你不使用composer請參考https://github.com/lootils/uuid,

如果你的項目是基于composer搭建的,那么請參考https://github.com/ramsey/uuid

具體的源碼我就不搬運了,小伙伴們自己取下來就可以直接使用了

PHP生成唯一標識符代碼示例:

 

 
  1. < ?  
  2. //生成唯一標識符  
  3. //sha1()函數, "安全散列算法(SHA1)"  
  4. function create_unique() {  
  5. $data = $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']  
  6. .time() . rand();  
  7. return sha1($data);  
  8. //return md5(time().$data);  
  9. //return $data;  
  10. }  
  11. ?>  

PHP生成唯一標識符函數描述及例子

 

 
  1. < ?  
  2. $newhash = create_unique();  
  3. echo $newhash;  
  4. ?> 

再給大家分享一個

 

 
  1. /* 
  2. * 信號量(Semaphore)。 
  3. * 這是一個包裝類,用于解決不同平臺下對“信號量”的不同實現方式。 
  4. * 目前這個類只是象征性的,在 Windows 平臺下實際是空跑(并沒有真的實現互斥)。 
  5. */ 
  6. class SemWrapper 
  7. private $hasSemSupport; 
  8. private $sem; 
  9. const SEM_KEY = 1; 
  10.  
  11. public function __construct() 
  12. $this->hasSemSupport = function_exists( 'sem_get' ); 
  13. if ( $this->hasSemSupport ) { 
  14. $this->sem = sem_get( self::SEM_KEY ); 
  15.  
  16. public function acquire() { 
  17. if ( $this->hasSemSupport ) { 
  18. return sem_acquire( $this->sem ); 
  19. return true
  20.  
  21. public function release() { 
  22. if ( $this->hasSemSupport ) { 
  23. return sem_release( $this->sem ); 
  24. return true
  25.  
  26. /* 
  27. * 順序號發生器。 
  28. */ 
  29. class SeqGenerator 
  30. const SHM_KEY = 1; 
  31.  
  32. /** 
  33. * 對順序號發生器進行初始化。 
  34. * 僅在服務器啟動后的第一次調用有效,此后再調用此方法沒有實際作用。 
  35. * @param int $start 產生順序號的起始值。 
  36. * @return boolean 返回 true 表示成功。 
  37. */ 
  38. static public function init( $start = 1 ) 
  39. // 通過信號量實現互斥,避免對共享內存的訪問沖突 
  40. $sw = new SemWrapper; 
  41. if ( ! $sw->acquire() ) { 
  42. return false
  43.  
  44. // 打開共享內存 
  45. $shm_id = shmop_open( self::SHM_KEY, 'n', 0644, 4 ); 
  46. if ( empty($shm_id) ) { 
  47. // 因使用了 'n' 模式,如果無法打開共享內存,可以認為該共享內存已經創建,無需再次初始化 
  48. $sw->release(); 
  49. return true
  50.  
  51. // 在共享內存中寫入初始值 
  52. $size = shmop_write( $shm_id, pack( 'L', $start ), 0 ); 
  53. if ( $size != 4 ) { 
  54. shmop_close( $shm_id ); 
  55. $sw->release(); 
  56. return false
  57.  
  58. // 關閉共享內存,釋放信號量 
  59. shmop_close( $shm_id ); 
  60. $sw->release(); 
  61. return true
  62.  
  63. /** 
  64. * 產生下一個順序號。 
  65. * @return int 產生的順序號 
  66. */ 
  67. static public function next() 
  68. // 通過信號量實現互斥,避免對共享內存的訪問沖突 
  69. $sw = new SemWrapper; 
  70. if ( ! $sw->acquire() ) { 
  71. return 0; 
  72.  
  73. // 打開共享內存 
  74. $shm_id = shmop_open( self::SHM_KEY, 'w', 0, 0 ); 
  75. if ( empty($shm_id) ) { 
  76. $sw->release(); 
  77. return 0; 
  78.  
  79. // 從共享內存中讀出順序號 
  80. $data = shmop_read( $shm_id, 0, 4 ); 
  81. if ( empty($data) ) { 
  82. $sw->release(); 
  83. return 0; 
  84.  
  85. $arr = unpack( 'L', $data ); 
  86. $seq = $arr[1]; 
  87.  
  88. // 把下一個順序號寫入共享內存 
  89. $size = shmop_write( $shm_id, pack( 'L', $seq + 1 ), 0 ); 
  90. if ( $size != 4 ) { 
  91. $sw->release(); 
  92. return 0; 
  93.  
  94. // 關閉共享內存,釋放信號量 
  95. shmop_close( $shm_id ); 
  96. $sw->release(); 
  97. return $seq; 
  98.  
  99. $a = SeqGenerator::init( time() ); 
  100. var_dump($a); 
  101.  
  102. for ( $i=0; $i < 10; $i++ ) { 
  103. $seq = SeqGenerator::next(); 
  104. var_dump($seq); 

好了,今天就先到這里吧,希望對大家學習PHP能夠有所幫助


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产91久久久久久浪潮蜜月 | 久久精品一区视频 | 成人性视频在线 | 久久久久一区二区三区四区五区 | 国产精品久久久久久婷婷天堂 | 国产精品av久久久久久网址 | 日本黄色大片免费 | 欧美日韩国产成人在线观看 | 精品无码一区在线观看 | 日本在线国产 | 久草成人在线观看 | 亚洲最新色 | 国产一级午夜 | 在线成人看片 | 精品在线观看一区二区 | 国产精品一区二区三区在线 | 久久影院在线观看 | 最新91在线视频 | 日美av在线 | 成熟女人特级毛片www免费 | 日韩在线播放第一页 | 成人黄色短视频在线观看 | 九九热免费观看 | 免费一级毛片在线播放视频老 | 欧美日韩国产成人在线 | 久久精品com | 黑人一级片视频 | 黄色av网站在线观看 | 91精品国产91 | 看一级大毛片 | 久操福利视频 | 久草在线观看福利视频 | 久久久一区二区三区四区 | 久久久久久久99 | 在线观看va | 国产1区2 | 国产免费午夜 | 国产精品久久国产精品 | 毛片视频网址 | 久色成人| 国产精品区在线12p 午夜视频色 |