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.?>
上述代码是一段经典的概率算法,$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);
一、两个域名:www.domain.com和img.domain.com
二、在www域名的服务器中上传文件:
up.html
Html代码
1.<form name="myform" action="save.php?action=ok" method="POST" enctype="multipart/form-data" >
2.<input type="file" name="itname" value="">
3.<input type="submit" name="tt" value="upit">
4.</form>
save.php
Php代码
1.if(@$_GET['action']=="ok")
2.{
3.$picname="upfile/".rand().".jpg";
4.move_uploaded_file($_FILES['itname']['tmp_name'],$picname);
5.}
6.
7.$ftp_server="img.domain.com";//要连接的服务器域名
8.$con=ftp_connect($ftp_server);//连接FTP服务器
9.ftp_login($con,"username","password");//发送用户名和密码
10.$tempstate=ftp_put($con,"drckness.jpg",$picname,FTP_BINARY)//以二进制方式上传文件
11.if($tempstate){
12.echo "上传成功";
13.unlik($picname);//删除www服务器上的图片当然你也可以保留
14.}else{
15.echo "上传未成功";
16.
17.};
18.ftp_quit($conn);// 关闭联接,不然会一直开着占用资源
以上只是说明如何实现图片和WEB分离的原理。在实际开发中,还要进行如:上传检测,水印,缩略图生成,冗余判断,延时间操作,图片路径记录等操作。
但只要明白了原理其它的应该不在话下了吧:)
$im = imagegrabscreen();
imagepng($im, "myscreenshot.png");
?>
* 抓取一个窗口(IE为例)
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$im = imagegrabwindow($handle);
$browser->Quit();
imagepng($im, "iesnap.png");
$im = imagegrabscreen();
?>
* 抓取IE窗口及窗口内容(IE为例)
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->Navigate("http://blog.thepimp.net");
/* Still working? */
while ($browser->Busy) {
com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>
* IE全屏模式
$browser = new COM("InternetExplorer.Application");
$handle = $browser->HWND;
$browser->Visible = true;
$browser->FullScreen = true;
$browser->Navigate("http://blog.thepimp.net");
/* Is it completely loaded? (be aware of frames!)*/
while ($browser->Busy) {
com_message_pump(4000);
}
$im = imagegrabwindow($handle, 0);
$browser->Quit();
imagepng($im, "iesnap.png");
?>
需要说明几点
1.这二种方法只能工作在windows下面,
2.黑屏解决办法--->>web 服务器(iis或apache)做为windows服务时,必须打开"允许与桌面交互"的选项.(点击服务属性->登录->勾选"允许与桌面交互".(一定要记得重起apache或其他的服务器才会有用,我已经成功,无庸质疑)
3.需要gb库版本为2.0.34(php5.2.2默认自带)
1、介绍PHP水印原理和流程
原始图片--》上传到dir --》 载入到内存 -》 PHP初始化 -》 水印处理
2、ImageCreateFrom* 图片载入函数
ImageCreateFrom* 载入内存是一个将图片文件载入内存供PHP使用的过程
imagecreatefromgif
imagecreatefromjpeg
imagecreatefrompng
imagecreatefromwbmp
imagecreatefromstring : 通过一串图片编码
使用格式:
imagecreatefromgif('php100.gif');
3、imagecopy 图片合并函数
imagecopy ( Dimg, Simg, int x, int y, int src_x, int src_y, int src_w, int src_h )
Dimg:被加水印的图片
simg:水印图片
x,y:显示在图片的位置(水印图片在图片的显示位置)
src_x,src_y:水印图片从哪里开始显示
src_w,src_h:水印图片的宽度和高度
4、ImageCopyResized图片剪切函数
imagecopyresized ( resource dst_image, resource src_image, int dst_x,int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )
dst_image:新图片
src_image:原来的图片
dst_x,dst_y:从什么地方开始对齐
src_x,src_y:从哪里开始剪切
int dst_w, int dst_h:新图的大小
int src_w, int src_h:原始图的大小
在使用剪切图之前我们需要先建立一个真彩图,也就是方便内存来存储
3. $image="winter.jpg";
4.
5. //取得图片的大小
6. $img=GetImageSize($image);
7.
8. //$img[2] 中存储的是图片的格式
9. swith($img[2]){
10. case 1:
11. $im=@ImageCreateFormGIF($image);
12. break;
13.
14. case 2:
15. $im=@ImageCreateFormJPEG($image);
16. break;
17.
18. case 3:
19. $im=@ImageCreateFormPNG($image);
20. break;
21. }
22.
23. //文字水印
24. $tc=imagecolorallocate($im,255,255,255);//颜色
25. $str=iconv("gbk","utf-8","新年");//输出内容
26. imagettftext($im,12,0,20,20,$tc,'simhe1.ttf',$str);//写入图片
27.
28.
29.
30.
31.
32. //图片水印
33. $log="1.jpg";
34. $l=GetImageSize($log);
35.
36. swith($l2]){
37.
38. case 1:
39. $in=@ImageCreateFormGIF($log);
40. break;
41.
42. case 2:
43. $in=@ImageCreateFormJPEG($log);
44. break;
45.
46. case 3:
47. $in=@ImageCreateFormPNG($log);
48. break;
49.
50. }
51.
52. //图片合并
53. imagecopy($im,$in,400,50,0,0,"120","345");
54.
55. //输出图片
56. imageJpeg($im,"新图");
57.
58.//剪切
59.
60.//首先建议一个空的真彩图
61. $new=ImageCreateTrueColor(500,500);
62.
63. //ImageCopyResized图片剪切函数
64. imagecopyresized ( resource dst_image, resource src_image, int dst_x,int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )
65.
66.
67.?>




2012/12/19 18:09 
