PHP captcha komut dosyası için rastgele bir kelime almak için en iyi yolu

5 Cevap php

Ben yeni bir CAPTCHA senaryo üzerinde çalışıyorum ve ben CAPTCHA resmi metin için kullanmak istiyorum 300 5 harfli bir kelime listesi var diyelim örneğin kelimelerin bir listesini istiyorum dışında neredeyse tamamlandı.

Ne için bu liste ile başa çıkmak için bir yüksek trafik sitede performans için en iyi yol olacağını?

Read the words from a text file on every load
Store in an array
other?

5 Cevap

Bu varyasyon sayısını kısıtlayan bu yana kelimelerin sabit bir listeyi kullanarak Captcha zayıf yapabilirdiniz sadece n! / (n - k!) seçenekleri. n = 300 kelime ve k = CAPTCHA başına 2 farklı kelimelerle olursa olsun sözleri ne kadar sadece 89.700 seçenek olacaktır.

Eğer rasgele dört harf (az) bir dizi kullanmak isterseniz size daha fazla seçenek (tam n ^ k 26 ^ 4 = 456.976 =) olacaktı.

Eğer sadece 300 yüz kelime seçmek istiyorsanız, ben sadece düz php kodunda bir dizi hepsini koymak ve dışarı rastgele birini çekmek istiyorum. Yani en iyi performansı olacaktır.

Best option for performance

  1. Disk IO sitenizin çoğu zaman yavaş yapacak budur çünkü, en iyi performansı almak için bellek (APC veya APC veya Memcache için Memcache => google / stackoverflow arama) rastgele numaraları listesini koymak, iyi olurdu. Bunun için yeteri kadar bellek (> = 128MB) ile bir kutu olmalı ve (APC / Memcache) yazılımı yükleyebilirsiniz. Eğer yüksek trafik sitede iyi bir performans istiyorsanız, sizin için ödemek için istekli olmalıdır!

  2. Eğer bir hosting sağlayıcısı (ama o zaman en iyi performansı almazsınız), o zaman her deyimi diskten dosyasını almak gerektiğinden, aynı dosyada bir dizi kelime koymak için iyi olurdu.

return random word

Şanslı basit bir rand işlev çağrısı ile, rastgele bir sayı getirebilir Dediğim gibi

return ($words[rand(0, count($words)-1);

$ Kelimeler bütün kelimeleri ile dizi olduğu.

VPS hosting

Bunlar google kullanarak bulundu barındıran bazı ucuz VPS, ama ben size yüksek performanslı sitesi için hosting en iyi VPS bulmak biraz daha araştırma yapmak gerektiğini düşünüyorum.

Bunun yerine 300 kelime, sadece rastgele bir sayı üretmek ve bu görüntüleyebilirsiniz. Bir liste için gerek yok, ya da, bir liste yükleniyor veya listesini yönetme ....

Saniyede işlemek için ne kadar çok oturumlarının gerekiyor? Bu optimizasyon vakit geçirmek için doğru yer gibi görünmüyor. Sadece herhangi bir şekilde hakkında sizin kelime listesi sadece 300 kelime, özellikle, rastgele bir kelime ince olmalıdır bulabilirsiniz.

Ben bir simple metin dosyası, satır başına bir kelime ile başlar ve tıpkı basit bir şey yapmak istiyorum

$words = file("wordlist.txt");
return ($words[rand(0, count($word)-1);

ve gerçekten bir darboğaz olduğunu kanıtladı sadece ben rastgele bir fseek () veya diğer bazı "yüksek performanslı" hile yapmak için değiştirmek istiyorum.