在PHP中为验证码脚本获取随机单词的最佳方法

在PHP中为验证码脚本获取随机单词的最佳方法,php,captcha,Php,Captcha,我正在编写一个新的验证码脚本,它几乎完成了,除了我想有一个单词列表,例如,让我们假设我有一个300个5个字母的单词列表,我想用于验证码图像文本 在高流量的网站上,处理此列表的最佳方式是什么 每次加载时从文本文件中读取单词 存储在数组中 其他的 如果您只想从300个单词中进行选择,我会将它们全部放在一个直接的php代码数组中,然后随机抽取一个。这将是最好的性能。如果您只想从300个单词中进行选择,我会将它们全部放在一个直接的php代码数组中,然后随机抽取一个。这将是最好的性能。您可以生成一个随机数

我正在编写一个新的验证码脚本,它几乎完成了,除了我想有一个单词列表,例如,让我们假设我有一个300个5个字母的单词列表,我想用于验证码图像文本

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

每次加载时从文本文件中读取单词
存储在数组中

其他的

如果您只想从300个单词中进行选择,我会将它们全部放在一个直接的php代码数组中,然后随机抽取一个。这将是最好的性能。

如果您只想从300个单词中进行选择,我会将它们全部放在一个直接的php代码数组中,然后随机抽取一个。这将是最好的性能。

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

您只需生成一个随机数并显示它,而无需300个单词。不需要列表,也不需要加载列表,也不需要管理列表,…。

您每秒需要处理多少次登录?这似乎不适合花时间进行优化。不管你用什么方法找到这个随机单词都可以,尤其是当你的单词表只有300个单词的时候

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

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

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

您需要每秒处理多少次登录?这似乎不适合花时间进行优化。不管你用什么方法找到这个随机单词都可以,尤其是当你的单词表只有300个单词的时候

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

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

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

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


如果您使用四个随机字母(a-z)的序列,您将获得更多选项(确切地说是n^k=26^4=456976)。

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

如果您使用四个随机字母(a-z)的序列,您将获得更多选项(正好是n^k=26^4=456976)。

最佳性能选项
  • 最好将随机数列表放在内存中(APC或Memcache=>google/stackoverflow搜索APC或Memcache),以获得最佳性能,因为光盘IO在大多数情况下都会使站点变慢。为此,您应该有一个具有足够内存(>=128MB)的盒子,并且可以安装软件(APC/Memcache)。如果你想在一个高流量的网站上有好的表现,你应该愿意为此付费

  • 如果您使用的是共享主机提供程序(但这样您就无法获得最佳性能),那么最好将单词放入同一文件中的数组中,因为每个require语句都将从光盘中获取该文件

  • 返回随机字 正如lucky所说,您可以通过一个简单的rand函数调用获取一个随机数

    return ($words[rand(0, count($words)-1);
    
    其中$words是包含所有单词的数组

    VPS主机
    这些是我在谷歌上找到的一些便宜的VPS主机,但我认为你应该做更多的研究,为你的高性能网站找到最好的VPS主机。

    最佳性能选择
  • 最好将随机数列表放在内存中(APC或Memcache=>google/stackoverflow搜索APC或Memcache),以获得最佳性能,因为光盘IO在大多数情况下都会使站点变慢。为此,您应该有一个具有足够内存(>=128MB)的盒子,并且可以安装软件(APC/Memcache)。如果你想在一个高流量的网站上有好的表现,你应该愿意为此付费

  • 如果您使用的是共享主机提供程序(但这样您就无法获得最佳性能),那么最好将单词放入同一文件中的数组中,因为每个require语句都将从光盘中获取该文件

  • 返回随机字 正如lucky所说,您可以通过一个简单的rand函数调用获取一个随机数

    return ($words[rand(0, count($words)-1);
    
    其中$words是包含所有单词的数组

    VPS主机

    这些是我在谷歌上找到的一些便宜的VPS主机,但我认为你应该做更多的研究,为你的高性能网站找到最好的VPS主机。

    为什么不使用网上提供的免费验证码服务?比如:我不想要外部服务,比如把东西放在内部,我认为这更专业。上面的网站提供了php脚本,这些脚本将被放在您的Web服务器中。您不需要与他们的服务器通信。只是它们为您提供了现成的代码。总之,这只是一个建议。至少看一看他们的代码。哦,好的,是的,我会看一看,实际上我做我的是因为我看了很多不同的预制件,没有一件符合我的需要,所以我自己编写了代码,我很高兴我只是想在随机字符之外添加一些单词,谢谢,不过我会查一下,在自制和开箱即用之间有折衷。对于脚本来说,自制软件可能非常容易破解,而且您可能会在应用程序中引入巨大的安全漏洞,而没有意识到这一点。另一方面,更传统的软件包可能有人正在积极尝试绕过它。为什么不呢