Re: [請益] 產生驗證碼

看板PHP作者 (霸格尼尼)時間18年前 (2007/12/08 19:31), 編輯推噓2(2012)
留言14則, 2人參與, 最新討論串2/4 (看更多)
※ 引述《cloudlin322 (麥芽糖N  ﳿ︠)》之銘言: : 想請問一下板上的高手 : 我現在要寫個程式來產生驗證碼 : 而這驗證碼為7位數 由數字、大小寫英文所產生 : 問題不在於如何產生 : 主要的問題在於我要產生六十萬筆!!!!!!!!!! : 而且每一筆都要不一樣 : 想要請問怎樣子寫才會快?? : 目前做法: : 產生的驗證碼去比對資料庫,若是沒有則儲存到資料庫裡面 : 每產生一筆就要去比對一次 : 產生到第四萬筆就要去比對四萬筆資料 : 接下來就會速度很慢了....導致網頁time out.... #!/usr/local/bin/php <?php $a=array(); $r=''; $a[$r]=1; for($i=0;$i<600000;++$i){ while(isset($a[$r])){ $r=gen(); } echo $i.':'.$r."\n"; $a[$r]=1; } function gen(){ $t='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $r=''; for($i=0;$i<7;++$i){ $r.=$t[rand(0,61)]; } return $r; } ?> 這樣一下子就跑完了 記憶體能裝的下的東西就裝記憶體 快多了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.169.71.109

12/08 19:33, , 1F
在我可憐的筆電上跑1分鐘11.46秒
12/08 19:33, 1F

12/08 19:35, , 2F
而且由於對hash做的最佳化 剛好在這問題上有效果
12/08 19:35, 2F

12/08 19:42, , 3F
所以isset()又會比塞進array再用in_array快
12/08 19:42, 3F

12/08 19:44, , 4F
請問這樣能確保每個值都是唯一的嗎??
12/08 19:44, 4F

12/08 19:50, , 5F
你說呢
12/08 19:50, 5F

12/08 19:50, , 6F
如果沒寫錯的話應該是....但我無法確定我有沒有腦殘
12/08 19:50, 6F

12/08 19:57, , 7F
加上另一道檢查跑了三次都沒出錯
12/08 19:57, 7F

12/08 20:00, , 8F
把substr($t,rand(0,61),1)改成$t[rand(0,61)]
12/08 20:00, 8F

12/08 20:01, , 9F
剩下42.34秒
12/08 20:01, 9F
※ 編輯: buganini 來自: 221.169.71.109 (12/08 20:01)

12/08 20:03, , 10F
直接redirect進檔案應該會更快
12/08 20:03, 10F

12/08 20:04, , 11F
喔喔 剛剛42.34是因為我把畫面切過來打逼了
12/08 20:04, 11F

12/08 20:05, , 12F
全程觀看畫面是1:02 全程不觀看畫面15.26秒
12/08 20:05, 12F

12/08 20:05, , 13F
OS:視窗真是吃資源...
12/08 20:05, 13F

12/08 20:16, , 14F
在我筆店上redirect進檔案大概45~48秒
12/08 20:16, 14F
文章代碼(AID): #17Me2ErK (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
文章代碼(AID): #17Me2ErK (PHP)