php中cookie统计访问者登录次数:
$_COOKIE["counter"]?($c=$_COOKIE["counter"]+1):($c=1);
setCookie("counter",$c,time()+60);
echo "<b>欢迎您第"."<font color=#ff0000>".$c."</font>次访问cookie</b>";
//by www.
?>
下面是有关这个例子的代码说明,供大家参考。
以上代码中,首先,浏览器请求一个资源(这个php页面),发送下面的HTTP包头内容到服务器:
HOST:localhost
Accept:*/*
Accept-language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0 (compatible;MSIE 6.0;Windows NT 5.1;SV1)
Connection:Keep-Alive
动态网页程序(index.php)创建了Cookie,服务器传输下面的HTTP报头内容到浏览器:
Server:Apache/2.2.6 (Win32) PHP/5.2.6
Date:Fri,23 Mar 2009 23:15:55 GMT
Connection:Keep-Alive
Content-Length:65
Content-Typt:text/html
Set-Cookie:VisitorCount=1; expires=Thr,30-Jul-2010 16:00:00 GMT;domain=localhost;path=/
Cache-control:private
GET http://localhost/index.php HTTP/1.1
这将在客户端保存一个cookie文件,并保存$c变量,当再次请求时,就会将cookie中的数据传给服务器,例如下边的HTTP请求报头:
Accept-language:zh-cn
Pragma:no-cache
User-Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT 5.1; SV1)
Host:localhost
Connection:Keep-Alive
Cookie:VisitorCount=1
有了这样的分析,希望有助于大家理解与掌握php中cookie的用法。
PHP生成GIF动画的代码。
/**
* 生成gif动画的代码
* edit www.
*/
class GifMerge {
var $ver = '1.1';
var $dly = 50;
var $mod = 'C_FILE';
var $first = true;
var $use_loop = false;
var $transparent = false;
var $use_global_in = false;
var $x = 0;
var $y = 0;
var $ch = 0;
var $fin = 0;
var $fout = '';
var $loop = 0;
var $delay = 0;
var $width = 0;
var $height = 0;
var $trans1 = 255;
var $trans2 = 255;
var $trans3 = 255;
var $disposal = 2;
var $out_color_table_size = 0;
var $local_color_table_flag = 0;
var $global_color_table_size = 0;
var $out_color_table_sizecode = 0;
var $global_color_table_sizecode= 0;
var $gif = array(0x47, 0x49, 0x46);
var $buffer = array();
var $local_in = array();
var $global_in = array();
var $global_out = array();
var $logical_screen_descriptor = array();
function GifMerge($images, $t1, $t2, $t3, $loop, $dl, $xpos, $ypos, $model) {
if($model) {
$this->mod = $model;
}
if($loop > -1) {
$this->loop = floor($loop - 1);
$this->use_loop = true;
}
if($t1 > -1 && $t2 > -1 && $t3 > -1) {
$this->trans1 = $t1;
$this->trans2 = $t2;
$this->trans3 = $t3;
$this->transparent = true;
}
for($i = 0; $i < count($images); $i++) {
$dl[$i] ? $this->delay = $dl[$i] : $this->delay = $this->dly;
$xpos[$i] ? $this->x = $xpos[$i] : $this->x = 0;
$ypos[$i] ? $this->y = $ypos[$i] : $this->y = 0;
$this->start_gifmerge_process($images[$i]);
}
$this->fout .= "/x3b";
}
function start_gifmerge_process($fp) {
if($this->mod == 'C_FILE') {
if(!$this->fin = fopen($fp, 'rb')) {
return;
}
} elseif($this->mod == 'C_MEMORY') {
$this->ch = 0;
$this->fin = $fp;
}
$this->getbytes(6);
if(!$this->arrcmp($this->buffer, $this->gif, 3)) {
return;
}
$this->getbytes(7);
if($this->first) $this->logical_screen_descriptor = $this->buffer;
$this->global_color_table_sizecode = $this->buffer[4] & 0x07;
$this->global_color_table_size = 2 << $this->global_color_table_sizecode;
if($this->buffer[4] & 0x80) {
$this->getbytes((3 * $this->global_color_table_size));
for($i = 0; $i < ((3 * $this->global_color_table_size)); $i++) {
$this->global_in[$i] = $this->buffer[$i];
}
if($this->out_color_table_size == 0) {
$this->out_color_table_size = $this->global_color_table_size;
$out_color_table_sizecode = $this->global_color_table_sizecode;
$this->global_out = $this->global_in;
}
if($this->global_color_table_size != $this->out_color_table_size || $this->arrcmp($this->global_out, $this->global_in, (3 * $this->global_color_table_size))) {
$this->use_global_in = true;
}
}
for($loop = true; $loop;) {
$this->getbytes(1);
switch($this->buffer[0]) {
case 0x21:
$this->read_extension();
break;
case 0x2c:
$this->read_image_descriptor();
break;
case 0x3b:
$loop = false;
break;
default:
$loop = false;
}
}
if($this->mod == 'C_FILE') {
fclose($this->fin);
}
}
function read_image_descriptor() {
$this->getbytes(9);
$head = $this->buffer;
$this->local_color_table_flag = ($this->buffer[8] & 0x80) ? true : false;
if($this->local_color_table_flag) {
$sizecode = $this->buffer[8] & 0x07;
$size = 2 << $sizecode;
$this->getbytes(3 * $size);
for($i = 0; $i < (3 * $size); $i++) {
$this->local_in[$i] = $this->buffer[$i];
}
if($this->out_color_table_size == 0) {
$this->out_color_table_size = $size;
$out_color_table_sizecode = $sizecode;
for($i = 0; $i < (3 * $size); $i++)
{
$this->global_out[$i] = $this->local_in[$i];
}
}
}
if($this->first) {
$this->first = false;
$this->fout .= "/x47/x49/x46/x38/x39/x61";
if($this->width && $this->height) {
$this->logical_screen_descriptor[0] = $this->width & 0xFF;
$this->logical_screen_descriptor[1] = ($this->width & 0xFF00) >> 8;
$this->logical_screen_descriptor[2] = $this->height & 0xFF;
$this->logical_screen_descriptor[3] = ($this->height & 0xFF00) >> 8;
}
$this->logical_screen_descriptor[4] |= 0x80;
$this->logical_screen_descriptor[5] &= 0xF0;
$this->logical_screen_descriptor[6] |= $this->out_color_table_sizecode;
$this->putbytes($this->logical_screen_descriptor, 7);
$this->putbytes($this->global_out, ($this->out_color_table_size * 3));
if($this->use_loop) {
$ns[0] = 0x21;
$ns[1] = 0xFF;
$ns[2] = 0x0B;
$ns[3] = 0x4e;
$ns[4] = 0x45;
$ns[5] = 0x54;
$ns[6] = 0x53;
$ns[7] = 0x43;
$ns[8] = 0x41;
$ns[9] = 0x50;
$ns[10] = 0x45;
$ns[11] = 0x32;
$ns[12] = 0x2e;
$ns[13] = 0x30;
$ns[14] = 0x03;
$ns[15] = 0x01;
$ns[16] = $this->loop & 255;
$ns[17] = $this->loop >> 8;
$ns[18] = 0x00;
$this->putbytes($ns, 19);
}
}
if($this->use_global_in) {
$outtable = $this->global_in;
$outsize = $this->global_color_table_size;
$outsizecode = $this->global_color_table_sizecode;
} else {
$outtable = $this->global_out;
$outsize = $this->out_color_table_size;
}
if($this->local_color_table_flag) {
if($size == $this->out_color_table_size && !$this->arrcmp($this->local_in, $this->global_out, $size)) {
$outtable = $global_out;
$outsize = $this->out_color_table_size;
} else {
$outtable = $this->local_in;
$outsize = $size;
$outsizecode = $sizecode;
}
}
$use_trans = false;
if($this->transparent) {
for($i = 0; $i < $outsize; $i++) {
if($outtable[3 * $i] == $this->trans1 && $outtable [3 * $i + 1] == $this->trans2 && $outtable [3 * $i + 2] == $this->trans3) {
break;
}
}
if($i < $outsize) {
$transindex = $i;
$use_trans = true;
}
}
if($this->delay || $use_trans) {
$this->buffer[0] = 0x21;
$this->buffer[1] = 0xf9;
$this->buffer[2] = 0x04;
$this->buffer[3] = ($this->disposal << 2) + ($use_trans ? 1 : 0);
$this->buffer[4] = $this->delay & 0xff;
$this->buffer[5] = ($this->delay & 0xff00) >> 8;
$this->buffer[6] = $use_trans ? $transindex : 0;
$this->buffer[7] = 0x00;
$this->putbytes($this->buffer,8);
}
$this->buffer[0] = 0x2c;
$this->putbytes($this->buffer,1);
$head[0] = $this->x & 0xff;
$head[1] = ($this->x & 0xff00) >> 8;
$head[2] = $this->y & 0xff;
$head[3] = ($this->y & 0xff00) >> 8;
$head[8] &= 0x40;
if($outtable != $this->global_out) {
$head[8] |= 0x80;
$head[8] |= $outsizecode;
}
$this->putbytes($head,9);
if($outtable != $this->global_out) {
$this->putbytes($outtable, (3 * $outsize));
}
$this->getbytes(1);
$this->putbytes($this->buffer,1);
for(;;) {
$this->getbytes(1);
$this->putbytes($this->buffer,1);
if(($u = $this->buffer[0]) == 0) {
break;
}
$this->getbytes($u);
$this->putbytes($this->buffer, $u);
}
}
function read_extension() {
$this->getbytes(1);
switch($this->buffer[0]) {
case 0xf9:
$this->getbytes(6);
break;
case 0xfe:
for(;;) {
$this->getbytes(1);
if(($u = $this->buffer[0]) == 0) {
break;
}
$this->getbytes($u);
}
break;
case 0x01:
$this->getbytes(13);
for(;;) {
$this->getbytes(0);
if(($u = $this->buffer[0]) == 0) {
break;
}
$this->getbytes($u);
}
break;
case 0xff:
$this->getbytes(9);
$this->getbytes(3);
for(;;) {
$this->getbytes(1);
if(!$this->buffer[0]) {
break;
}
$this->getbytes($this->buffer[0]);
}
break;
default:
for(;;) {
$this->getbytes(1);
if(!$this->buffer[0]) {
break;
}
$this->getbytes($this->buffer[0]);
}
}
}
function arrcmp($b, $s, $l) {
for($i = 0; $i < $l; $i++) {
if($s{$i} != $b{$i}) {
return false;
}
}
return true;
}
function getbytes($l) {
for($i = 0; $i < $l; $i++) {
if($this->mod == 'C_FILE') {
$bin = unpack('C*', fread($this->fin, 1));
$this->buffer[$i] = $bin[1];
} elseif($this->mod == 'C_MEMORY') {
$bin = unpack('C*', substr($this->fin, $this->ch, 1));
$this->buffer[$i] = $bin[1];
$this->ch++;
}
}
return $this->buffer;
}
function putbytes($s, $l) {
for($i = 0; $i < $l; $i++) {
$this->fout .= pack('C*', $s[$i]);
}
}
function getAnimation() {
return $this->fout;
}
}
?>
PHP基础
一、初识PHP
PHP是与HTML混合使用的嵌入式语言。
1、PHP标记
默认标记<?php ?> 短标记<? ?>,需在php.ini中将short_open_tag选项开启 短标记和其他标记不提倡使用
2、关键字不区分大小写,用户自定义的类名和函数名不区分大小写,变量名区分大小写
3、输出
boolean print(参数) 返回布尔值
void echo(参数) 无返回值echo的效率要高一点
二、数据类型
1、比较两个浮点数的通常方法是先移动若干小数位,然后转换为整型数据再进行比较。
2、双引号做分隔符的字符串支持变量名解析,单引号做分隔符的字符串不支持变量名解析。
$name="张三";
"$name"=>张三 || '$name'=>$name || "$name先生"=>空 || "{$name}先生"=>张三先生 || "${name}先生"=>张三先生
3、字符串定义的方式:单引号,双引号和heredoc(<<<heredoc_markheredoc_mark)
4、对象类型必须显式的进行声明。类用关键字class定义,使用关键字new生成这个类的实例,使用->符号类访问类中的属性和方法
class car{public $cololr;function beep(){}}$mycar = new car; $mycar->color='red'; $mycar->beep();
5、PHP是一种弱语言类型,变量的类型会根据赋予的值自行确定,而且往往在变量声明的同时进行变量初值的赋值。
6、数据类型强制转换时,只须将需要的类型名写在变量前的括号内即可。
三、常量和变量
1、定义常量 define("常量名",表达式或值) 常量名建议全大写,但不是必需的
使用常量 直接使用定义的常量名,无须在常量名前加"$"
预定义常量:_FILE_当前PHP程序文件名 _LINE_当前PHP程序所在的行数(在哪指哪)
2、变量不需要显式的声明,在对变量赋初值时就对变量进行了声明。如果变量没有被设置初值,则其初值即为NULL。
3、变量的赋值:传值赋值和引用赋值。如$a=&$b; 即b原来指向了一个存储位置,引用赋值后,a也指向了这个存储位置,这时,a或b的销毁都不会对对方造成任何影响,但是如果其中一个的值改变了,则另一个也会作出相同的改变。
4、访问预定义变量之使用超全局变量,总共9个超全局变量
5、局部变量:在函数内定义的变量 只能在函数内使用
全局变量:在函数外定义的变量 默认只能在函数外使用
要想在函数内使用全局变量,需要在函数内将变量用global声明,或者使用超全局变量数组&GLOBALS["变量名"]
在PHP中,只有函数能提供局部作用域。
超全局变量$GLOBALS包含了全部的变量
静态变量的特点:只有在第一次被调用时进行初始化,函数结束后不销毁,并且下次使用时,该变量还保留原来的值。
静态变量只能在函数内定义和使用。
可变变量:将变量的名字也作为一个变量来使用。$a=b;$b=c;$$a=$b=c;
外部变量:使用GET方式能传递的数据最大为256字节,使用POST最大为2MB
四、流程控制(仅写与java等其他语言的不同)
1、交互格式(冒号语法) 不建议使用,经典的比较直观
2、foreach():该语法是专门为数组设计的
第一种格式foreach(target_array as $value) statement
第二种格式foreach(target_array as $key=>$value) statement
3、break 数字:要跳出的结构的层数
contiue 数字:要跳出的结构的层数
4、exit语句可以结束当前整个脚本的执行,通常用于错误检查。
exit; exit("错误原因");
die()是exit的别名 $conn=mysql_connect()("localhost","root","") or die("无法连接到MySQL服务器");
五、数组
1、关联数组与数字索引数组唯一的区别在于索引的类型。
2、数字索引数组
初始化:直接为数组元素赋值array()函数
如果数组不存在,那么为数组元素赋值的同时即可创建该数组
如果数组元素是按顺序排列的数字,则在对数组进行初始化时,可以使用range()函数
range()有3个参数,第一个参数指定初始值,第二个参数指定终止值,第三个参数可选,用于指定步长
3、关联数组
初始化:直接为数组元素赋值array()函数
4、与数组相关的运算符
+ 联合 $a+$b 将$附件到$a之后,但是任何索引值冲突的元素将不会被添加
== 等于 $a==$b 如果$a和$b包含相同元素,返回true(索引值和元素必须都相同) 除了顺序,其他必须完全一样
!= <> 不等于
=== 恒等 如果$a和$b包含相同顺序的相同元素,返回true(索引值和元素必须都相同) 必须完全一模一样
!== 不恒等
5、数组的排序
boolean sort() 按数字和字母顺序排列 排列后会赋予新的索引值,原有索引值被删除
void asort()按升序对数组进行排序 排列后保留原来的索引关系
integer ksort() 按索引值升序进行排列
usort(数组,方法名)按用户自定义方法进行排序
array_multisort()() 一次对多个数组进行排序
natsort() 按自然顺序排序,排序后保留原有的索引关系
natcasesort() 自然排序,不区分大小写
6、数组的反向排序
rsort() 对数组元素按降序排列
arsort()
krsort()
7、对数组进行重新排序
boolean shuffle() 对数组进行随机排列
array array_reverse() 将数组中的元素逆置
array array_flip() 将数组中的索引与其元素值兑换
8、数组的遍历
current() 获取数组中当前指针所指的元素值
next()将数组的指针向后移动一位,返回移动后指针所指向的元素的元素值
prev()将数组的指针向前移动一位,返回移动后指针所指向的元素的元素值
reset()指针设置回数组的起始位置
end() 将指针移动到数组的最后一个元素处
each()返回数组中当前指针所指向的“索引/元素值”对,并将数组指针向后移动一位
返回一个包含4个元素的数组,且该数组的索引分别为0,key,1,value
key() 返回数组当前指针所指向的索引值
array_walk()以相同的方式对数组中的每一个元素进行处理
array_reduce() 将自定义函数依次应用于数组的每个元素
9、其他的数组操作函数
list()从一个数组中一次提取多个值,并同时赋值给多个变量
count()/sizeof()计算数组中元素的个数