私は新しいキャプチャ スクリプトに取り組んでおり、単語のリストが必要であることを除いて、ほぼ完成しています。たとえば、キャプチャ イメージ テキストに使用したい 5 文字の単語が 300 個あるとします。
トラフィックの多いサイトでこのリストを処理するための最良の方法は何でしょうか?
読み込みのたびにテキスト ファイルから単語を読み取る
配列に格納
する その他?
単語の固定リストを使用すると、バリエーションの数がnだけに制限されるため、Captcha が弱くなる可能性があります。/ ( n - k )! オプション。n = 300 単語、k = 2 つの異なる単語をキャプチャごとに使用すると、単語の長さに関係なく、わずか 89700 のオプションになります。
4 つのランダムな文字 (az) のシーケンスを使用すると、より多くのオプションが得られます (正確にはn ^ k = 26^4 = 456976)。
300 百語から選択するだけの場合は、それらすべてを単純な php コードの配列に入れ、ランダムに 1 つ取り出します。最高のパフォーマンスでしょう。
ほとんどの場合、ディスク IO がサイトの速度を低下させる原因となるため、乱数のリストをメモリ (APC または Memcache => google/stackoverflow 検索で APC または Memcache を検索) に配置して、最高のパフォーマンスを得ることが最善です。このためには、十分なメモリ (>= 128MB) を備えたボックスが必要であり、ソフトウェア (APC/Memcache) をインストールできます。トラフィックの多いサイトで優れたパフォーマンスが必要な場合は、喜んで支払う必要があります!!!
共有ホスティング プロバイダーを使用している場合 (ただし、最高のパフォーマンスは得られません)、すべての require ステートメントがディスクからファイルを取得するため、同じファイル内の配列に単語を配置することをお勧めします。
ラッキーが言ったように、単純な rand 関数呼び出しで乱数を取得できます
return ($words[rand(0, count($words)-1);
$words は、すべての単語を含む配列です。
これらは、Google を使用して見つけたいくつかの安価な VPS ホスティングですが、高性能サイトに最適な VPS ホスティングを見つけるために、さらに調査を行う必要があると思います。
300 語の代わりに、単純に乱数を生成して表示することができます。リスト、リストのロード、またはリストの管理は必要ありません....
1 秒あたり何回のログオンを処理する必要がありますか? これは、最適化に時間を費やすのに適切な場所ではないようです。特に単語リストが 300 語しかない場合は、ランダムな単語を見つける方法は何でもかまいません。
単純なテキスト ファイルから始めて、1 行に 1 語ずつ、次のような単純なことを行います。
$words = file("wordlist.txt");
return ($words[rand(0, count($word)-1);
それが本当にボトルネックであることが判明した場合にのみ、ランダムな fseek() またはその他の「高性能」トリックを実行するように変更します。