Melhor maneira de obter uma palavra aleatória para um script captcha em PHP

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Eu estou trabalhando em um novo script captcha e está quase concluída, exceto que eu gostaria de ter uma lista de palavras, por exemplo, digamos que eu tenho uma lista de palavras 300 5 carta que eu gostaria de usar para o texto da imagem captcha .

Qual seria a melhor maneira para o desempenho em um site de alto tráfego para lidar com esta lista para ele?

Leia as palavras de um arquivo de texto em cada carga
Armazenar em uma matriz
de outros?

Foi útil?

Solução

Usando uma lista fixa de palavras poderiam fazer seu captcha fraca, uma vez que restringe o número de variações de apenas n ! / ( n - k )! opções. Com n = 300 palavras e k = 2 palavras diferentes por captcha seria apenas 89700 opções não importa quanto tempo as palavras são.

Se você usar uma seqüência de quatro letras aleatórias (az) que se obtém mais opções (exatamente n ^ k = 26 ^ 4 = 456.976).

Outras dicas

Se você quiser apenas 300 cem palavras para escolher, eu tinha acabado de colocá-los todos em um array em código PHP em linha reta e puxar um fora de forma aleatória. Isso seria o melhor desempenho.

Melhor opção para o desempenho

  1. Seria melhor, para colocar lista de números aleatórios na memória (APC ou Memcache => google / search stackoverflow para APC ou Memcache) para obter o melhor desempenho, porque disco IO é o que vai fazer o seu site lento a maior parte do tempo. Para isso, você deve ter uma caixa com memória suficiente (> = 128 MB) e você pode instalar o software (APC / Memcache). Se você quer um bom desempenho em um site de alto tráfego, você deve estar disposto a pagar por !!!

  2. Se você estiver em um provedor de hospedagem compartilhada (mas então você não terá melhor desempenho), então seria melhor para colocar as palavras em uma matriz no mesmo arquivo, porque cada exigem declaração vai buscar o arquivo a partir do disco.

retorno palavra aleatória

Como sorte disse que pode buscar um número aleatório, por uma simples chamada de função rand

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

Onde $ palavras é a matriz com todas as palavras.

VPS hospedagem

Estas são algumas barato VPS eu encontrei usando google, mas eu acho que você deve fazer mais algumas pesquisas encontrar as melhores VPS hospedagem para o seu site de alto desempenho.

Em vez de 300 palavras, você poderia simplesmente gerar um número aleatório e exibir isso. Não há necessidade de uma lista, ou carregar uma lista, ou gerenciamento da lista, ....

Assim como muitos logins por segundo que você precisa para lidar com? Este não parece ser o lugar certo para passar o tempo na otimização. Apenas sobre qualquer maneira que você encontrar a palavra aleatória deve estar bem, especialmente se a sua lista de palavras é de apenas 300 palavras.

Eu começaria com um simples arquivo de texto, uma palavra por linha, e apenas fazer algo simples como

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

e somente se ele realmente provou ser um gargalo que eu iria mudá-lo para fazer um fseek random () ou algum outro truque "alta performance".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top