在PHP中获取captcha脚本的随机单词的最佳方法

时间:2009-08-01 06:55:28

标签: php captcha

我正在研究一个新的验证码脚本,它几乎完成了,除了我想要一个单词列表,例如我可以说我有一个300个5个字母单词的列表,我想用于验证码图像文本。

在高流量网站上处理此列表的最佳方式是什么?

在每次加载时读取文本文件中的文字 存储在阵列中 其他?

5 个答案:

答案 0 :(得分:3)

使用固定的单词列表可能会使您的Captcha变弱,因为它会将变体数限制为 n ! /( n - k )!选项。使用 n = 300字和 k =每个验证码2个不同的单词,无论单词有多长,它都只有89700个选项。

如果您使用四个随机字母(az)的序列,您将获得更多选项(完全 n ^ k = 26 ^ 4 = 456976)。

答案 1 :(得分:2)

如果您只想要300个单词可供选择,我只需将它们全部放在一个直接的PHP代码中,然后随机拉出一个。那将是最好的表现。

答案 2 :(得分:1)

性能的最佳选择

  1. 最好将随机数列表放在内存中(APC或Memcache => google / stackoverflow搜索APC或Memcache)以获得最佳性能,因为光盘IO是什么会使您的网站大部分时间都很慢。为此你应该有一个具有足够内存(> = 128MB)的盒子,你可以安装软件(APC / Memcache)。如果您想在高流量网站上获得良好的表现,您应该愿意支付!!!

  2. 如果您在共享托管服务提供商(但之后您将无法获得最佳性能),那么最好将单词放在同一个文件中的数组中,因为每个require语句都会获取来自光盘的文件。

  3. 返回随机字

    幸运的是,你可以通过一个简单的rand函数调用来获取一个随机数

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

    其中$ words是包含所有单词的数组。

    VPS托管

    这些是我发现使用谷歌的一些便宜的VPS托管,但我认为你应该做更多的研究,为你的高性能网站找到最好的VPS托管。

答案 3 :(得分:0)

而不是300个单词,您可以简单地生成一个随机数并显示它。无需列表,加载列表或管理列表......

答案 4 :(得分:0)

您需要处理每秒多少次登录?这似乎不适合花时间进行优化。几乎任何你找到随机单词的方式应该没问题,特别是如果你的单词列表只有300个单词。

我从一个 简单 文本文件开始,每行一个字,然后做一些简单的事情,如

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

只有当它确实被证明是瓶颈时,我才会将其更改为随机fseek()或其他一些“高性能”技巧。