生产一个随机的结果,如何控制概率?

熊猫与猫无关 发布于 2013/05/12 00:56
阅读 1K+
收藏 0
PHP

首先事情的起因是这样的,公司的网站本来没有多少用户,所以就一台服务器也没有启动CDN等作为静态资源的缓存分流数据。但是不知道从何时起百度的蜘蛛十分的疯狂每天的抓取量在30W左右,使用iftop查看服务器带宽一直跑满在5M的峰值上,于是想办法限制百度的蜘蛛。

按理说直接在http服务器上就可以限制蜘蛛,但是势必影响到蜘蛛抓取网页的结果,所以我在想有没有什么办法随机控制蜘蛛的访问,于是使用了 mt_rand(0,1)去作为一个条件控制蜘蛛访问站点,如果条件成真的话,则直接给蜘蛛返回500。但是似乎遇到了一个问题就是这样子使用简单的随机数似乎不能控制蜘蛛到访的概率我就想有没有什么办法来控制概率。

于是乎我想到了一种更二逼的办法

先做一个数组类似于array(0,0,0,0,1,1,1,1,1,1) 然后每次用array_rand取一个值出来。看了一下控制概率似乎像是那么一回事了。但是如果我想把概率控制到百分之一的时候或者控制到千分之五的时候,似乎发现这种办法就是一种拙死的表现。

其实针对蜘蛛的次数到百度的站长平台反映一下或者严格的控制robots.txt多半就可以解决,但是如果我真的需要一个有概率的随机结果使用PHP怎么样可以简单快速的解决呢?

以下是问题补充:

@熊猫与猫无关:概率肯定都需要知道发生的总数值和需要出现某一结果的次数,我只是想问如果我要控制到千分之四除了弄一个包含有一千个元素的数组之外还有没有别的办法。 另外利用记录时间戳和已经发生过次数这种基于时间因素控制概率似乎不是我想要的回答。 (2013/05/12 01:31)
加载中
0
蟋蟀哥哥
蟋蟀哥哥
像osc一样,直接智能解析,把访问解析到缓存服务器上去。
蟋蟀哥哥
蟋蟀哥哥
这样会影响seo
熊猫与猫无关
熊猫与猫无关
针对蜘蛛来讲这是最好的解决办法。 弄一个虚拟主机就可以搞定了,虚拟主机和正式服务器使用同一个数据源,DNSPOD设置一下让蜘蛛解析到虚拟主机。但是我总是在想如何可以控制一件事情发生的概率总体趋向于一个指定的数值
1
傲罗
傲罗
$a = range(1,100);
$b = array_rand($a);
$c = $a[$b];
if ($c <= 10) {
	echo '小于等于10,允许';
} else {
	echo '不允许';
}
一个笨方法,不知道效率如何
熊猫与猫无关
熊猫与猫无关
十分感谢这应该就是我需要的答案,不过最佳答案只能设置一个,先看见蟋蟀哥哥的了,看来我现在是基础恶心的一塌糊涂数组函数很少使用range居然忘记range可以直接生生成数组。
0
依然傻笑
依然傻笑
如果你单纯不想让百度蜘蛛访问频率低点的话,可以直接到百度站长平台设置的= =!
0
IdleMan
IdleMan
但是如果我想把概率控制到百分之一的时候或者控制到千分之五的时候,似乎发现这种办法就是一种拙死的表现。”概率就是即使是99.999%也可能连续出不中的时候,更何况你的是1%。2L的才是行之有效的方法,老是返回500,给你降几个权重就杯具了
熊猫与猫无关
熊猫与猫无关
百度站长工具设置的那个生效需要等待好久。最好的办法应该就是蟋蟀哥哥说的那种把针对蜘蛛的解析直接丢给缓存服务器,但是我总是在想怎么控制一个事件的概率。
返回顶部
顶部