我正在研究一个新的验证码脚本,它几乎完成了,除了我想要一个单词列表,例如我可以说我有一个300个5个字母单词的列表,我想用于验证码图像文本。
在高流量网站上处理此列表的最佳方式是什么?
在每次加载时读取文本文件中的文字 存储在阵列中 其他?
答案 0 :(得分:3)
使用固定的单词列表可能会使您的Captcha变弱,因为它会将变体数限制为 n ! /( n - k )!选项。使用 n = 300字和 k =每个验证码2个不同的单词,无论单词有多长,它都只有89700个选项。
如果您使用四个随机字母(az)的序列,您将获得更多选项(完全 n ^ k = 26 ^ 4 = 456976)。
答案 1 :(得分:2)
如果您只想要300个单词可供选择,我只需将它们全部放在一个直接的PHP代码中,然后随机拉出一个。那将是最好的表现。
答案 2 :(得分:1)
最好将随机数列表放在内存中(APC或Memcache => google / stackoverflow搜索APC或Memcache)以获得最佳性能,因为光盘IO是什么会使您的网站大部分时间都很慢。为此你应该有一个具有足够内存(> = 128MB)的盒子,你可以安装软件(APC / Memcache)。如果您想在高流量网站上获得良好的表现,您应该愿意支付!!!
如果您在共享托管服务提供商(但之后您将无法获得最佳性能),那么最好将单词放在同一个文件中的数组中,因为每个require语句都会获取来自光盘的文件。
幸运的是,你可以通过一个简单的rand函数调用来获取一个随机数
return ($words[rand(0, count($words)-1);
其中$ words是包含所有单词的数组。
这些是我发现使用谷歌的一些便宜的VPS托管,但我认为你应该做更多的研究,为你的高性能网站找到最好的VPS托管。
答案 3 :(得分:0)
而不是300个单词,您可以简单地生成一个随机数并显示它。无需列表,加载列表或管理列表......
答案 4 :(得分:0)
您需要处理每秒多少次登录?这似乎不适合花时间进行优化。几乎任何你找到随机单词的方式应该没问题,特别是如果你的单词列表只有300个单词。
我从一个 简单 文本文件开始,每行一个字,然后做一些简单的事情,如
$words = file("wordlist.txt");
return ($words[rand(0, count($word)-1);
只有当它确实被证明是瓶颈时,我才会将其更改为随机fseek()或其他一些“高性能”技巧。