La mejor manera de obtener una palabra aleatoria para un script captcha en PHP

StackOverflow https://stackoverflow.com/questions/1216010

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy trabajando en un nuevo script captcha y está casi terminado, excepto que me gustaría tener una lista de palabras, por ejemplo, digamos que tengo una lista de 300 palabras de 5 letras que me gustaría usar para el texto de la imagen captcha .

¿Cuál sería la mejor forma de rendimiento en un sitio de alto tráfico para lidiar con esta lista?

Leer las palabras de un archivo de texto en cada carga
Almacenar en una matriz
¿otro?

¿Fue útil?

Solución

¡Usar una lista fija de palabras podría debilitar su Captcha ya que restringe el número de variaciones a solo n ! / ( n - k )! opciones. Con n = 300 palabras y k = 2 palabras diferentes por captcha, serían solo 89700 opciones, sin importar la longitud de las palabras.

Si usa una secuencia de cuatro letras aleatorias (az) obtendrá más opciones (exactamente n ^ k = 26 ^ 4 = 456976).

Otros consejos

Si solo quieres 30000 palabras para elegir, las pondré todas en una matriz en código PHP directo y sacaré una al azar. Ese sería el mejor rendimiento.

La mejor opción para el rendimiento

  1. Sería mejor poner una lista de números aleatorios en la memoria (APC o Memcache = > google / stackoverflow search para APC o Memcache) para obtener el mejor rendimiento, porque el disco IO es lo que hará que su sitio lento la mayor parte del tiempo. Para esto, debe tener una caja con suficiente memoria (> = 128MB) y puede instalar el software (APC / Memcache). ¡Si desea un buen rendimiento en un sitio de alto tráfico, debe estar dispuesto a pagar!

  2. Si está en un proveedor de alojamiento compartido (pero no obtendrá el mejor rendimiento), entonces sería mejor poner las palabras en una matriz en el mismo archivo, porque cada declaración require obtendrá el archivo del disco.

devolver palabra aleatoria

Como Lucky dijo que puedes obtener un número aleatorio, con una simple llamada de función rand

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

Donde $ palabras es la matriz con todas las palabras.

VPS hosting

Estos son algunos alojamientos VPS baratos que encontré usando Google, pero creo que debería investigar un poco más para encontrar el mejor alojamiento VPS para su sitio de alto rendimiento.

En lugar de 300 palabras, simplemente podría generar un número aleatorio y mostrarlo. No necesita una lista, ni cargar una lista, ni administrar la lista, ...

¿Cuántos inicios de sesión por segundo necesita manejar? Este no parece ser el lugar adecuado para pasar el tiempo en la optimización. Cualquier forma en que encuentre la palabra aleatoria debería estar bien, especialmente si su lista de palabras es de solo 300 palabras.

Comenzaría con un archivo de texto simple , una palabra por línea, y simplemente haría algo simple como

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

y solo si realmente demostrara ser un cuello de botella lo cambiaría para hacer un fseek aleatorio () o algún otro `` alto rendimiento '' truco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top