验证100万个+;在线表单上使用PHP和客户端编程语言的值
我一直在尝试使用PHP和在线表单上的客户端编程语言验证100多万个随机生成的值(字符串),但我面临一些挑战: PHP 链接到(可编辑)PHP代码:验证100万个+;在线表单上使用PHP和客户端编程语言的值,php,arrays,Php,Arrays,我一直在尝试使用PHP和在线表单上的客户端编程语言验证100多万个随机生成的值(字符串),但我面临一些挑战: PHP 链接到(可编辑)PHP代码: PHP代码: <?php function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyz-_.'; $charactersLength = strlen($characters); $ran
PHP代码:
<?php
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyz-_.';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
$unique = array();
for ($i = 0; $i < 9000000; $i++)
{
$u=$i+1;
$random = generateRandomString(5);
if(!in_array($random, $unique)){
echo $u.".m".$random."@[server]\n";
$unique[] = $random;
gc_collect_cycles();
}else{
echo "duplicate detected";
$i--;
}
}
echo memory_get_peak_usage();
假设您能够编辑php.ini:
按如下所述增加内存限制:
有关“内存限制”,请参阅
对于“执行时间超时”,添加:
set_time_limit(0);
在PHP文件的顶部。
有趣的问题,首先,每当你想到这样的解决方案时,你首先需要考虑的一件事就是<强>它可以是异步?< /强>如果你的答案是“是”,那么你的实现可能会很简单,否则,您可能需要支付巨大的服务器成本或呈现随机缓存的结果
注意:删除gc\u收集\u循环
。它的作用与您想要的相反,您几乎不需要手动调用它
话虽如此,我建议你的做法如下:
使用在客户端浏览器上只打开一次的websocket,然后将结果从服务器实时转发到浏览器。当然,这段代码本身可以通过javascript完全在客户端运行,因此如果它不仅仅是一个PoC,您可以将php代码转换为javascript
一旦生成的代码被确认为唯一的,更改代码以生成项目或通过websocket转发结果
但是,如果您真的只是按照PHP代码所说的去做,那么您可以完全用javascript来做,并节省您的服务器资源 您尝试过使用集合吗
当您希望确保值不会出现两次时,集合非常有效
检查set-it方式中是否存在值比在数组中的所有项上循环更快
我不是PHP方面的专家,但在Ruby中它看起来会像这样
require'set'
字符='0123456789abcdefghijklmnopqrstuvwxyz-.'.'分割('');
unique=Set.new()
def GeneratorDomainString(l=10)
Array.new(l){CHARS.sample}.join
结束
而唯一。长度<1_000_000
random_string=GeneratorDomainString
如果!唯一。包括?(随机字符串)
唯一。添加(随机_字符串)
结束
结束
希望有帮助尝试了此操作,但for循环太长。即使有无限限制(-1),服务器也会停止脚本运行。我对我的问题进行了编辑以反映他的想法。我尝试将其作为内存限制,但for循环太大,即使限制为-1也不够。为了释放一些内存,我不得不将for循环分成大块,我也这么认为。因此,您建议使用Ajax将所有值发送到服务器端,以便在客户端创建.txt文件?@EliseeKamanzi不是Ajax,这也很昂贵,因为您必须使用Ajax进行轮询,而不是使用。谢谢!我将切换到javascript,打开一个套接字将值传递给服务器端的PHP脚本。一个小问题:如果我必须将1个值与100万个现有值进行比较,那么客户端的RAM使用情况如何?我知道使用PHP时,当数组增长超过10000个项目时,内存使用会受到严重影响。@EliseeKamanzi实际上没有那么多。一个5个字符的字符串大约有5个字节,500万字节大约只有5mb。每个字符串的处理和测试都需要计算时间。