PHPでキャプチャスクリプトのランダムな単語を取得する最良の方法

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

  •  06-07-2019
  •  | 
  •  

質問

新しいcaptchaスクリプトに取り組んでいますが、単語のリストが必要な場合を除き、ほぼ完成しています。たとえば、captchaの画像テキストに使用したい5文字の単語300個のリストがあるとします。

このリストを処理するために、トラフィックの多いサイトでパフォーマンスを得るための最良の方法は何でしょうか?

すべての読み込みでテキストファイルから単語を読み取ります
配列に格納する
その他?

役に立ちましたか?

解決

単語の固定リストを使用すると、バリエーションの数が n に制限されるため、Captchaが弱くなる可能性があります。 /( n - k )!オプション。キャプチャごとに n = 300単語と k = 2種類の単語がある場合、単語の長さに関係なく、89700のオプションになります。

4つのランダムな文字(az)のシーケンスを使用すると、より多くのオプションが得られます(正確に n ^ k = 26 ^ 4 = 456976)。

他のヒント

300語から選択する場合は、それらをすべてphpコードの配列に入れて、ランダムに1つ抜き出します。それが最高のパフォーマンスです。

パフォーマンスに最適なオプション

  1. 最高のパフォーマンスを得るには、メモリの乱数リスト(APCまたはMemcache = "gt; APCまたはMemcacheのgoogle / stackoverflow検索)を配置することをお勧めします。ほとんどの時間を遅くします。このためには、十分なメモリ(> = 128MB)を備えたボックスが必要で、ソフトウェア(APC / Memcache)をインストールできます。トラフィックの多いサイトで良好なパフォーマンスが必要な場合は、喜んで料金を支払う必要があります!!!

  2. 共有ホスティングプロバイダーを使用している場合(ただし、最高のパフォーマンスが得られない場合)、すべてのrequireステートメントがフェッチするため、同じファイル内の配列に単語を配置するのが最善ですディスクからのファイル。

ランダムな単語を返す

ラッキーのように、簡単なrand関数呼び出しで乱数を取得できます

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

$ wordsは、すべての単語を含む配列です。

VPSホスティング

これらは、Googleを使用して見つけた安価なVPSホスティングですが、高性能サイトに最適なVPSホスティングを見つけるために、さらに調査を行う必要があると思います。

300語の代わりに、単に乱数を生成して表示することができます。リストの必要性、リストのロード、リストの管理などは必要ありません...

1秒間に何件のログオンを処理する必要がありますか?これは、最適化に時間を費やすのにふさわしい場所とは思えません。特に単語リストが300単語しかない場合は、ランダムな単語を見つける方法はほとんど問題ありません。

シンプル テキストファイルから始めて、1行に1単語を入力します。

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

そしてそれが本当にボトルネックであることが判明した場合にのみ、ランダムなfseek()または他の「高性能」を実行するように変更します。トリック。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top