ArthurXF从业10年的CTO,受上海非凡学院邀请,进行PHP,CSS,FREEBSD等网络技能授课培训,有意向参加的,请联系.
01.<?php  
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.?>  
 
Tags: ,
概率计算函数

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;

}



上述代码是一段经典的概率算法,$proArr是一个预先设置的数组,假设数组为:array(100,200,300,400),开始是从1,1000这个概率范围内筛选第一个数是否在他的出现概率范围之内,  如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。这样筛选到最终,总会有一个数满足要求。就相当于去一个箱子里摸东西,第一个不是,第二个不是,第三个还不是,那最后一个一定是。这个算法简单,而且效率非常高,关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。

接下来我们通过PHP配置奖项

$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),

);



上例中是一个二维数组,记录了所有本次抽奖的奖项信息,其中id表示中奖等级,prize表示奖品,v表示中奖概率。注意其中的v必须为整数,你可以将对应的奖项的v设置成0,即意味着该奖项抽中的几率是0,数组中v的总和(基数),基数越大越能体现概率的准确性。本例中v的总和为100,那么平板电脑对应的中奖概率就是1%,如果v的总和是10000,那中奖概率就是万分之一了

PHP循环奖项设置数组,通过概率计算函数get_rand获取抽中的奖项id。将中奖奖品保存在数组$res['yes']中,而剩下的未中奖的信息保存在$res['no']中,最后输出json个数数据给前端页面。

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);




Tags:
只是简单说明一下原理,其它的自己探索吧:)

一、两个域名: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分离的原理。在实际开发中,还要进行如:上传检测,水印,缩略图生成,冗余判断,延时间操作,图片路径记录等操作。

但只要明白了原理其它的应该不在话下了吧:)

Tags:

PHP抓屏函数

2010/12/06 22:16 ArthurXF
* 屏幕快照
$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默认自带)
Tags: ,
很多学生都在问我缩略图和打水印怎么做?就算我给了他们现成的功能类,他们也不能理解。这里我把缩略图的打水印主要用到的几个功能函数的中文解释写出来,供大家更好的学习。

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:原始图的大小

 
在使用剪切图之前我们需要先建立一个真彩图,也就是方便内存来存储

引用
1.2.  
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.?>  
Tags: , ,
分页: 1/11 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]