生成有偏随机数据

问题:

你想生成随机数字,但又希望这些数字具有某种倾向性,也就是说这些数字出现在某个范围内的概率会比出现在其他范围内的概率更高。例如,你想要根据每个广告活动未展示的剩余数目成比例地推出一系列网页横幅广告。

方案:

使用如例下所示的pc_rand_weighted()函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php  
/* 大致思想就是:将剩余展示数目累加
比如:A:5,B:8,C:10
累加后:A:5,B:13,C:23
然后随即一个数,范围0~23
判断 随机数是否小于A或B或C,小于则成功

效果:谁的剩余展示数目越多,被随机到的几率越高
*/
function pc_rand_weighted($numbers)
{
$total = 0;
foreach ($numbers as $number => $weight) {
$total += $weight;
$distribution[$number] = $total;
}
$rand = mt_rand(0, $total - 1);
foreach ($distribution as $number => $weights) {
if ($rand < $weights) {
return $number;
}
}
}
?>

Read More

PHP实现定时任务的几种方法

这几天需要用PHP写一个定时抓取网页的服务器应用. 在网上搜了一下解决办法, 发现OSchina的 一个问题的解答很精彩(值得一看,谢谢大牛们的精彩回答O(∩_∩)O~), 提出几种解决办法.现总结如下.

一. 简单直接不顾后果型

1
2
3
4
5
6
7
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.  
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
//ToDo
sleep($interval);// 等待5分钟
}while(true);

缺点: 启动之后,便无法控制, 除非终止 PHP 宿主. 不要采用这样方法, 除非你是黑客.

Read More

解析su,su-,sudo的区别

肯定有人不知道下面两个命令的区别:

1
2
[warmcolor@PC ~]$ su  
[warmcolor@PC ~]$ su - ##(有个减号)

那下面两个命令的区别呢?

1
2
[warmcolor@PC ~]$ su  
[warmcolor@PC ~]$ sudo su

首先,su,su -这两个命令都能获得root权限,

但root的密码是不能随便交给别人的,这时就需要sudo命令了,

使用用户自己的密码,临时赋予一般用户root权限,

sudo的运行过程是这样的:
检查用户是否在/etc/sudoers的列表中,
如果在,以root权限执行命令,
取消用户的root

Read More

MySQL主主同步配置步骤

创建同步用户、修改 /etc/my.cnf 配置文件,为其添加以下内容、分别重启服务器ODD EVEN 上的mysql服务。

MySQL 主主同步配置

服务器名 IP 系统 MySQL
odd.example.com 192.168.1.116 rhel-5.8 5.5.16
even.example.com 192.168.1.115 rhel-5.8 5.5.16

假设要同步的库是 db_rocky

Read More