看板 PHP 關於我們 聯絡資訊
※ 引述《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
buganini:在我可憐的筆電上跑1分鐘11.46秒 12/08 19:33
buganini:而且由於對hash做的最佳化 剛好在這問題上有效果 12/08 19:35
buganini:所以isset()又會比塞進array再用in_array快 12/08 19:42
cloudlin322:請問這樣能確保每個值都是唯一的嗎?? 12/08 19:44
buganini:你說呢 12/08 19:50
buganini:如果沒寫錯的話應該是....但我無法確定我有沒有腦殘 12/08 19:50
buganini:加上另一道檢查跑了三次都沒出錯 12/08 19:57
buganini:把substr($t,rand(0,61),1)改成$t[rand(0,61)] 12/08 20:00
buganini:剩下42.34秒 12/08 20:01
※ 編輯: buganini 來自: 221.169.71.109 (12/08 20:01)
buganini:直接redirect進檔案應該會更快 12/08 20:03
buganini:喔喔 剛剛42.34是因為我把畫面切過來打逼了 12/08 20:04
buganini:全程觀看畫面是1:02 全程不觀看畫面15.26秒 12/08 20:05
buganini:OS:視窗真是吃資源... 12/08 20:05
buganini:在我筆店上redirect進檔案大概45~48秒 12/08 20:16