PHP 常见header 状态
02.//200 正常状态
03.header('HTTP/1.1 200 OK');
04.
05.// 301 永久重定向,记得在后面要加重定向地址 Location:$url
06.header('HTTP/1.1 301 Moved Permanently');
07.
08.// 重定向,其实就是302 暂时重定向
09.header('Location: http://www.tj-px.com/');
10.
11.// 设置页面304 没有修改
12.header('HTTP/1.1 304 Not Modified');
13.
14.// 显示登录框,
15.header('HTTP/1.1 401 Unauthorized');
16.header('WWW-Authenticate: Basic realm="登录信息"');
17.echo '显示的信息!';
18.
19.// 403 禁止访问
20.header('HTTP/1.1 403 Forbidden');
21.
22.// 404 错误
23.header('HTTP/1.1 404 Not Found');
24.
25.// 500 服务器错误
26.header('HTTP/1.1 500 Internal Server Error');
27.
28.// 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.tj-px.com/ /> 相同)
29.header('Refresh: 3; url=http://www.tj-px.com/');
30.echo '10后跳转到http://www.tj-px.com';
31.
32.// 重写 X-Powered-By 值
33.header('X-Powered-By: PHP/5.3.0');
34.header('X-Powered-By: Brain/0.6b');
35.
36.//设置上下文语言
37.header('Content-language: en');
38.
39.// 设置页面最后修改时间(多用于防缓存)
40.$time = time() - 60; //建议使用filetime函数来设置页面缓存时间
41.header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');
42.
43.// 设置内容长度
44.header('Content-Length: 39344');
45.
46.// 设置头文件类型,可以用于流文件或者文件下载
47.header('Content-Type: application/octet-stream');
48.header('Content-Disposition: attachment; filename="example.zip"');
49.header('Content-Transfer-Encoding: binary');
50.readfile('example.zip');//读取文件到客户端
51.
52.//禁用页面缓存
53.header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
54.header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
55.header('Pragma: no-cache');
56.
57.//设置页面头信息
58.header('Content-Type: text/html; charset=iso-8859-1');
59.header('Content-Type: text/html; charset=utf-8');
60.header('Content-Type: text/plain');
61.header('Content-Type: image/jpeg');
62.header('Content-Type: application/zip');
63.header('Content-Type: application/pdf');
64.header('Content-Type: audio/mpeg');
65.header('Content-Type: application/x-shockwave-flash');
66.//.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富
67.?>
PHP概率算法(适用于抽奖、随机广告)
上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内, 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。这个算法简单,而且效率非常高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。function get_rand($proArr) {
$result = '';
//概率数组的总概率精度
$proSum = array_sum($proArr);
//概率数组循环
foreach ($proArr as $key => $proCur) {
$randNum = mt_rand(1, $proSum);
if ($randNum <= $proCur) {
$result = $key;
break;
} else {
$proSum -= $proCur;
}
}
unset ($proArr);
return $result;
}
上例中是一个二维数组,记录了所有本次抽奖的奖项信息,其中id表示中奖等级,prize表示奖品,v表示中奖概率。注意其中的v必须为整数,你可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么平板电脑对应的中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一了$prize_arr = array(
'0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),
'1' => array('id'=>2,'prize'=>'数码相机','v'=>5),
'2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),
'3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),
'4' => array('id'=>5,'prize'=>'10Q币','v'=>22),
'5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),
);
foreach ($prize_arr as $key => $val) {
$arr[$val['id']] = $val['v'];
}
$rid = get_rand($arr); //根据概率获取奖项id
$res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项
unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项
shuffle($prize_arr); //打乱数组顺序
for($i=0;$i<count($prize_arr);$i++){
$pr[] = $prize_arr[$i]['prize'];
}
$res['no'] = $pr; // 除了中奖外的其他数据
echo json_encode($res);