php的sin
㈠ php的常用系统函数有哪些
PHP自带了大量的系统函数,使用这些函数可以完成大部分的任务。常用的有数学运算函数和日期时间函数。
1.数学运算函数:
数学运算是程序中最常执行的功能之一,PHP提供了很多系统函数实现运算功能,无须安装、编译和配置便可以直接使用。下表列出了常用的数学函数:
函数名称
功能描述
函数名称
功能描述
abs()
绝对值
is_finite()
判断是否为有限值
acos()
反余弦
is_infinite()
判断是否为无限值
acosh()
反双曲余弦
is_nan()
判断是否为合法数值
asin()
反正弦
lcg_value()
组合线性同余发生器
asinh()
反双曲正弦
log10()
以10为底的对数
atan2()
两个参数的反正切
log()
自然对数
atan()
反正切
max()
最大值
atanh()
反双曲正切
min()
最小值
base_convert()
在任意进制之间转换数字
mt_getrandmax()
显示随机数的最大可能值
bindec()
二进制转换为十进制
mt_rand()
生成更好的随机数
ceil()
进一法取整
mt_sran()
播下一个更好随机数种子
cos()
余弦
octdec()
八进制转换为十进制
cosh()
双曲余弦
pi()
圆周率
decbin()
十进制转换为二进制
pow()
指数表达式
dechex()
十进制转换为十六进制
rad2deg()
将弧度转换为相应的角度值
decoct()
十进制转换为八进制
rand()
产生一个随机数
deg2rad()
将角度转换为弧度
round()
对浮点数四舍五入
exp()
计算e的指数
sin()
正弦
floor()
舍去法取整
sinh()
双曲正弦
fmod()
返回除法的浮点数余数
sqrt()
平方根
getrandmax()
显示随机数最大的可能值
srand()
播下随机数发生器种子
hexdec()
十六进制转换为十进制
tan()
正切
hypot()
计算直角三角形的斜边长度
tanh()
双曲正切
注意:这些数学函数仅能处理计算机中integer和float范围的值。
示例:产生随机密码的的函数
function CreatePassword($length=6) //生成密码函数,默认6位
{
$dictionary=””; //密码字典
$maxChar=strlen($dictionary); //获取字典长度
$password=””;
for($i=0; $i<$length; $i++) //随机生成每一位
{
$password.=$dictionary[rand(0, $maxChar)]; //产生随机数,再从字典取字母
}
return $password;
}
2.日期和时间运算:
PHP提供了丰富的日期和时间方面运算的函数。
1)UNIX时间戳:
时间戳(Timestamp)是源于UNIX系统的时间表示方法,是指从1970年1月1日(00:00:00GMT)起到现在所经过的秒数,因此也称为UNIX时间戳。
在PHP中使用时间戳的最简单方式就是调用time()函数,time()函数可以根据当前时间返回一个时间戳的表示法。示例:
echo “当前时间戳为:”.time();
2)日期函数:
PHP提供的一些常用的日期函数。
①date()函数:
date()函数用于格式化一个本地日期和时间。语法格式为:
string date(string $format [, int $timestamp])
返回将整数$timestamp按照$format给定格式而产生的字符串。其中,$timestamp参数是可选的,如果没有给出时间戳,则使用本地当前时间,即time()。
下表列出了$format格式化字符串参数的说明:
值
说明
返回值
D
月份中的第几天,有前导零的2位数字
01到31
D
星期中的第几天,文本表示,3个字母
Mon到Sun
J
月份中的第几天,没有前导零
1到31
L
L的小写字母,表示星期几的完整文本格式
Sunday到Saturday
N
数字表示的星期中的第几天
1(表示星期一)到7(表示星期天)
S
每月天数后面的英文后缀,2个字符
st,nd,rd或th。可以和j一起用
W
星期中的第几天,数字表示
0(表示星期天)到6(表示星期六)
Z
年份中的第几天
0到366
W
年份中的第几周,每周从星期一开始
例如:42(当年的第42周)
F
月份,完整的文本格式,例如January
January到December
M
数字表示的月份,有前导零
01到12
M
3个字母缩写表示的月份
Jan到Dec
N
数字表示的月份,没有前导零
1到12
t
给定月份所应有的天数
28到31
L
是否为闰年
如果是闰年为1,否则为0
o
年份数字
例如:2016
Y
4位数字完整表示的年份
例如:2016
y
2位数字表示的年份
例如:16
a
小写的上午和下午值
am或pm
A
大写的上午和下午值
AM或PM
g
小时,12小时格式,没有前导零
1到12
G
小时,24小时格式,没有前导零
0到23
h
小时,12小时格式,有前导零
01到12
H
小时,24小时格式,有前导零
00到23
i
有前导零的分钟数
00到59
s
秒数,有前导零
00到59
e
时区标识
例如:UTC,GMT,Atlantic/Azores
I
是否为夏令时
如果是夏令时为1,否则为0
O
与格林威治时间相差的小时数
例如:+0200
Z
时差偏移量的秒数
-43200到43200
c
ISO8601格式的日期
2011-05-12T15:19:21+00:00
r
RFC822格式的日期
例如:Thu, 21 Dec 2011 06:07:08 +0200
U
从January 1 1970 00:00:00开始至今的秒数
与time()函数相同
示例:
$today=date(“m/d/y”); //结果为:07/19/12
$today=date(“F j, Y, g:i a”); //结果为:July 19, 2012, 9:07 am
$today=date(“Y年n月j日”); //结果为:2012年7月19日
$today=date(“Y-m-d H:i:s”); //结果为:2012-07-19 09:07:32
$today=date(“D M j G:i:s T Y”); //结果为:Thu Jul 19 9:07:32 CST 2012
$today=date(‘i t i s t h e jS d a y’); //结果为:07 31 07 32 31 09 Asia/Shanghai 19th 19 am 12
$today=date(‘\i\t \i\s \t\h\e jS \d\a\y’); //结果为:it is the 19th day
$today=date(‘H:m:s \m \i\s\ \m\o \h’); //结果为:09:07:32 m is month
②gmdate()函数:
gmdate()函数实现与date()函数相同的功能,不同的是gmdate()函数返回的时间是格林威治标准时间(GMT)。语法格式为:
string gmdate(string $format [, int $timestamp])
③getdate()函数:
getdate()函数用于获取指定的日期和时间信息。语法格式为:
array getdate([int $timestamp])
如果没有指定时间戳$timestamp,则使用系统当前的本地时间。getdate()函数返回一个数组,数组中的每个元素代表日期和时间中的特定组成部分。下表列出了返回数组中键名的说明:
键名
说明
返回值例子
seconds
秒的数字表示
0到59
minutes
分钟的数字表示
0到59
hours
小时的数字表示
0到23
mday
月份中的第几天的数字表示
1到31
wday
星期中的第几天的数字表示
0(表示星期天)到6(表示星期六)
mon
月份的数字表示
1到12
year
4位数字表示的完整年份
例如:2016
yday
一年中的第几天的数字表示
0到365
weekday
星期几的完整文本表示
Sunday到Saturday
month
月份的完整的文本表示
January到December
0
自从UNIX纪元开始至今的秒数
和time()的返回值类似,是一个时间戳
示例:
<?php
$today=getdate();
print_r($today);
printf(“今天是%s年%s月%s日 星期%s \n”, $today[“year”], $today[“mon”], $today[“mday”], $today[“wday”]);
printf(“现在时间是%s时%s分%s秒”, $today[“hours”], $today[“minutes”], $today[“seconds”]);
?>
执行后的结果为:
Arrar
(
[seconds]=>15
[minutes]=>37
[hours]=>9
[mday]=>19
[wday]=>4
[mon]=>7
[year]=>2016
[yday]=>200
[weekday]=>Thursday
[month]=>July
[0]=>1342661835
)
今天是2016年7月19日 星期4
现在时间是 9时37分15秒
④checkdate()函数:
checkdate()函数用于检查一个日期是否有效,有效则返回true,否则返回false。语法格式为:
bool checkdate(int $month, int $day, int $year)
当满足如下条件时,checkdate()函数将认为是一个有效的日期:
·$year的值是从1到32767
·$month的值是从1到12
·$day的值在给定的$month所应该具有的天数范围之内,包括闰年情况
示例:
echo checkdate(2,29,2012)?”有效”:”无效”;
2)时间函数:
①time()函数:
time()函数使用方法非常简单,没有参数调用后返回当前日期和时间的UNIX时间戳。语法格式为:
int time(void)
示例:
$next50day=time()+(50*24*60*60); //计算50天以后的日期
②mktime()函数:
mktime()函数的作用与time()函数相同,都可以返回一个时间戳表示的时间。不同的是,在mktime()函数中可以指定具体的日期和时间。语法格式为:
int mktime([int $hour],[int $minute],[int $second],[int $month], [int $day],[int $year])
上述参数列表从右向左顺序省略,任何省略的参数会被设置为本地日期和时间的当前值。如果指定的时间无法表示,则返回false。mktime()函数在做日期计算和验证方面很有用。示例:
$day1=mktime(0,0,0,12,25,2012);
$day2=mktime(0,0,0,10,1,2012);
$days=($day1-$day2)/(24*60*60); //根据时间戳计算出相差的天数
③strtotime()函数:
strtotime()函数用于将可阅读的英文日期/时间字符串转换成UNIX时间戳。语法格式:
int strtotime(string $time[, int $now])
其中,$time参数表示要被转换的字符串,$now表示计算返回值的时间戳。如果没有提供$now参数,将使用系统的当前时间。strtotime()函数成功时返回时间戳,否则返回false。
④microtime()函数:
microtime()函数调用后将返回当前UNIX时间戳和微秒数。语法格式为:
mixed microtime([bool $get_as_float])
这里的可选参数$get_as_float是一个布尔值,如果为true将返回一个浮点数。默认不带参数时将以“msec sec”格式返回一个字符串,其中msec是微秒部分,sec是UNIX时间戳。
㈡ php 计算经纬度之间相差多少公里
//php 计算地图上两个坐标之间的距离
define('EARTH_RADIUS', 6378.137);//地球半径,假设地球是规则的球体
define('PI', 3.1415926);
/**
* 计算两组经纬度坐标 之间的距离
* params :lat1 纬度1; lng1 经度1; lat2 纬度2; lng2 经度2; len_type (1:m or 2:km);
* return m or km
*/
function GetDistance($lat1, $lng1, $lat2, $lng2, $len_type = 1, $decimal = 2)
{
$radLat1 = $lat1 * PI ()/ 180.0; //PI()圆周率
$radLat2 = $lat2 * PI() / 180.0;
$a = $radLat1 - $radLat2;
$b = ($lng1 * PI() / 180.0) - ($lng2 * PI() / 180.0);
$s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
$s = $s * EARTH_RADIUS;
$s = round($s * 1000);
if ($len_type --> 1)
{
$s /= 1000;
}
return round($s, $decimal);
}
echo GetDistance(39.908156,116.4767, 39.908452,116.450479, 1);//输出距离/米
㈢ php如何生成加粗或者斜体的文字样式图片
加粗或者斜体的文字可以用php的函数控制.我想你是想生成验证码图片是吗?
如果是想生成验证么图片有几个函数可以考虑
imagecreate($length,$height)创建图片.参数是图片的宽度和高度
imagecolorallocate($image,$r,$g,$b)设置背景色,r b g就是图片的三色rgb参数.这个可以由传入0-255的随机数决定随机的背景色.还可以生成字体色
imagettftext($_image,$fontSize,mt_rand(-40,70),$codeNX,$fontSize*1.5,$_color,$ttf,$code[$i]);写入随机的文字,这里要一个字一个字写.所以这个函数要循环调用.
网络了一下 找到了一个类...如下
<?php
/**
*安全验证码
*
*安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码。
*如果用中文做验证码(我这里不是哦,有兴趣你来改成用中文的),安全度会更好些,但验证码扭曲和旋转是王道,用了字体也算是已经给字体扭曲了,我就不再去给他添一只扭曲的足了。
*可配置的属性都是一些简单直观的变量,我就不用弄一堆的setter/getter了
*
*@author流水孟春<cmpan(at)qq.com>
*@rightNEWBSD
*@linkhttp://labs.yulans.cn/YL_Security_Secoder
*@linkhttp://wiki.yulans.cn/docs/yl/security/secoder
*/
classYL_Security_Secoder{
/**
*验证码的session的下标
*
*@varstring
*/
publicstatic$seKey='sid.sekey.ylans.cn';
publicstatic$expire=3000;//验证码过期时间(s)
/**
*验证码中使用的字符,01IO容易混淆,建议不用
*
*@varstring
*/
publicstatic$codeSet='346789ABCDEFGHJKLMNPQRTUVWXY';
publicstatic$fontSize=25;//验证码字体大小(px)
publicstatic$useCurve=true;//是否画混淆曲线
publicstatic$useNoise=true;//是否添加杂点
publicstatic$imageH=0;//验证码图片宽
publicstatic$imageL=0;//验证码图片长
publicstatic$length=4;//验证码位数
publicstatic$bg=array(243,251,254);//背景
protectedstatic$_image=null;//验证码图片实例
protectedstatic$_color=null;//验证码字体颜色
/**
*输出验证码并把验证码的值保存的session中
*验证码保存到session的格式为:$_SESSION[self::$seKey]=array('code'=>'验证码值','time'=>'验证码创建时间');
*/
publicstaticfunctionentry(){
//图片宽(px)
self::$imageL||self::$imageL=self::$length*self::$fontSize*1.5+self::$fontSize*1.5;
//图片高(px)
self::$imageH||self::$imageH=self::$fontSize*2;
//建立一幅self::$imageLxself::$imageH的图像
self::$_image=imagecreate(self::$imageL,self::$imageH);
//设置背景
imagecolorallocate(self::$_image,self::$bg[0],self::$bg[1],self::$bg[2]);
//验证码字体随机颜色
self::$_color=imagecolorallocate(self::$_image,mt_rand(1,120),mt_rand(1,120),mt_rand(1,120));
//验证码使用随机字体
$ttf=dirname(__FILE__).'/ttfs/'.mt_rand(1,20).'.ttf';
if(self::$useNoise){
//绘杂点
self::_writeNoise();
}
if(self::$useCurve){
//绘干扰线
self::_writeCurve();
}
//绘验证码
$code=array();//验证码
$codeNX=0;//验证码第N个字符的左边距
for($i=0;$i<self::$length;$i++){
$code[$i]=self::$codeSet[mt_rand(0,27)];
$codeNX+=mt_rand(self::$fontSize*1.2,self::$fontSize*1.6);
//写一个验证码字符
imagettftext(self::$_image,self::$fontSize,mt_rand(-40,70),$codeNX,self::$fontSize*1.5,self::$_color,$ttf,$code[$i]);
}
//保存验证码
isset($_SESSION)||session_start();
$_SESSION[self::$seKey]['code']=join('',$code);//把校验码保存到session
$_SESSION[self::$seKey]['time']=time();//验证码创建时间
header('Cache-Control:private,max-age=0,no-store,no-cache,must-revalidate');
header('Cache-Control:post-check=0,pre-check=0',false);
header('Pragma:no-cache');
header("content-type:image/png");
//输出图像
imagepng(self::$_image);
imagedestroy(self::$_image);
}
/**
*画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数)
*
*高中的数学公式咋都忘了涅,写出来
* 正弦型函数解析式:y=Asin(ωx+φ)+b
*各常数值对函数图像的影响:
*A:决定峰值(即纵向拉伸压缩的倍数)
*b:表示波形在Y轴的位置关系或纵向移动距离(上加下减)
*φ:决定波形与X轴位置关系或横向移动距离(左加右减)
*ω:决定周期(最小正周期T=2π/∣ω∣)
*
*/
protectedstaticfunction_writeCurve(){
$A=mt_rand(1,self::$imageH/2);//振幅
$b=mt_rand(-self::$imageH/4,self::$imageH/4);//Y轴方向偏移量
$f=mt_rand(-self::$imageH/4,self::$imageH/4);//X轴方向偏移量
$T=mt_rand(self::$imageH*1.5,self::$imageL*2);//周期
$w=(2*M_PI)/$T;
$px1=0;//曲线横坐标起始位置
$px2=mt_rand(self::$imageL/2,self::$imageL*0.667);//曲线横坐标结束位置
for($px=$px1;$px<=$px2;$px=$px+0.9){
if($w!=0){
$py=$A*sin($w*$px+$f)+$b+self::$imageH/2;//y=Asin(ωx+φ)+b
$i=(int)((self::$fontSize-6)/4);
while($i>0){
imagesetpixel(self::$_image,$px+$i,$py+$i,self::$_color);//这里画像素点比imagettftext和imagestring性能要好很多
$i--;
}
}
}
$A=mt_rand(1,self::$imageH/2);//振幅
$f=mt_rand(-self::$imageH/4,self::$imageH/4);//X轴方向偏移量
$T=mt_rand(self::$imageH*1.5,self::$imageL*2);//周期
$w=(2*M_PI)/$T;
$b=$py-$A*sin($w*$px+$f)-self::$imageH/2;
$px1=$px2;
$px2=self::$imageL;
for($px=$px1;$px<=$px2;$px=$px+0.9){
if($w!=0){
$py=$A*sin($w*$px+$f)+$b+self::$imageH/2;//y=Asin(ωx+φ)+b
$i=(int)((self::$fontSize-8)/4);
while($i>0){
imagesetpixel(self::$_image,$px+$i,$py+$i,self::$_color);//这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多
$i--;
}
}
}
}
/**
*画杂点
*往图片上写不同颜色的字母或数字
*/
protectedstaticfunction_writeNoise(){
for($i=0;$i<10;$i++){
//杂点颜色
$noiseColor=imagecolorallocate(
self::$_image,
mt_rand(150,225),
mt_rand(150,225),
mt_rand(150,225)
);
for($j=0;$j<5;$j++){
//绘杂点
imagestring(
self::$_image,
5,
mt_rand(-10,self::$imageL),
mt_rand(-10,self::$imageH),
self::$codeSet[mt_rand(0,27)],//杂点文本为随机的字母或数字
$noiseColor
);
}
}
}
/**
*验证验证码是否正确
*
*@paramstring$code用户验证码
*@returnbool用户验证码是否正确
*/
publicstaticfunctioncheck($code){
isset($_SESSION)||session_start();
//验证码不能为空
if(empty($code)||empty($_SESSION[self::$seKey])){
returnfalse;
}
//session过期
if(time()-$_SESSION[self::$seKey]['time']>self::$expire){
unset($_SESSION[self::$seKey]);
returnfalse;
}
if($code==$_SESSION[self::$seKey]['code']){
returntrue;
}
returnfalse;
}
}
//useage
/*
YL_Security_Secoder::$useNoise=false;//要更安全的话改成true
YL_Security_Secoder::$useCurve=true;
YL_Security_Secoder::entry();
*/
/*
//验证验证码
if(!YL_Security_Secoder::check(@$_POST['secode'])){
print'errorsecode';
}
*/这是效果
㈣ php经纬度之间的距离怎么算单位是公里
这里使用php计算两个坐标(经度,纬度)之间的距离,返回结果为米或者千米
function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
{
$pi80 = M_PI / 180;
$lat1 *= $pi80;
$lng1 *= $pi80;
$lat2 *= $pi80;
$lng2 *= $pi80;
$r = 6372.797; // mean radius of Earth in km
$dlat = $lat2 - $lat1;
$dlng = $lng2 - $lng1;
$a = sin($dlat/2)*sin($dlat/2)+cos($lat1)*cos($lat2)*sin($dlng/2)*sin($dlng/2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$km = $r * $c;
return ($miles ? ($km * 0.621371192) : $km);
}
㈤ php算三角函数
cos — 余弦
cosh — 双曲余弦
sin — 正弦
sinh — 双曲正弦
tan — 正切
tanh — 双曲正切
acos — 反余弦
acosh — 反双曲余弦
asin — 反正弦
asinh — 反双曲正弦
atan2 — 两个参数的反正切
atan — 反正切
atanh — 反双曲正切
㈥ PHP中COOKIE或SESSION值在不同页面取值不了
在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值.原因是因为当页面第一次被浏览器访问载入时,页面中的 cookie 会被设置,将其发送存储到客户端指定的存储位置,所以$_COOKIE没有接收到客户端发送过来的 cookie 变量的值,当刷新或到下一个页面时,客户端会在页面程序在服务器端运行之前,发送与该地址相对应的 cookie到服务器端,所以 $_COOKIE 可以得到的值!
说白了就是当每一个页面被访问时,如果客户端找到了与访问地址相对应的 cookie 时,会在程序在服务器端运行之前发送这个 cookie 到服务器端. (个人对此的看法)本人表达能力不强,如有不明,还请抱歉!php中设置cookie数组的时候,不可以用像php中的那个添加数据的方法:
<?php
setcookie('my_cookie[]', 1);
setcookie('my_cookie[]', 2);
print_r($_COOKIE); // Array ( [my_cookie] => Array ( [0] => 1 ))
// 数组的值添加是添加成功了,不过索引没有变,后面的数据将前的数据覆盖了!由此得到
my_cookie[],默认指向数据的第一元素的位置,即索引为0 的位置. 注意与php中的不一样! 以后用cookie数据记住要指定数组元素索引哦!
$my_cookie[] = 1;
$my_cookie[] = 2;
print_r($my_cookie); //Array ( [0] => 1 [1] => 2)
?>删除 cookie 变量的两个方法:
1.php
<?php
setcookie('user_name_1', 'zhaofei299', time()+3600); // 生存期为 1 个小时
setcookie('user_name_2', 'ZHAOFEI299', time()+3600); // 生存期为 1 个小时
?>2.php
<?php
setcookie('user_name_1'); // 第一种
setcookie('user_name_2', "", time()-1); // 第二种
print_r($_COOKIE); // 刷新页面2下以上会输出 Array ( [user_name_1] => )/*为什么超级全局变量 $_COOKIE 中的 user_name_1 没有被删除(变量为空并不代表不存在),而user_name_2被删除了? 那是因为两个删除变量的方式不同!
第一种: 是设置了 cookie 的生存期, 只不过是将它的值默认设置为空,生存期为与浏览器一样,浏览器关闭时,cookie才会删除!所以当重新打开一个浏览器,输出地址时,才会发现 cookie 变量全部被删除了!将2.php 中两个 setcookie() 函数部分注释掉看看(重新输出了地址)!第二种: 也是设置了 cookie 的生存期,是使 cookie 的生存期一定过期, cookie 也就被删除,所以刷新页面,客户端向服务器端发送 cookie 时, $_COOKIE 并没有能够得到该cookie变量的值!
*/
?>会话id默认储放在客户端Cookie中!
<?php
session_start();
print_r($_COOKIE);
?>
cookie的设置有两种方法header('set-cookie:user=zhaofei299');
setcookie('user', 'zhaofei299');会话变量不能被GET数据或POST数据重载!使用session变量传递数组,对象时无需序列化!
使用session变量传递对象时,在调用session_start()之前,必须包含该对类对象的定义,反序列化(serialize)也是如此!
删除单个会话变量可以使用unset($_SESSION['***']) 直接删除!删除所有的会话变量不可以用unset($_SESSION),因为这样会将所有的会话信息删除,包含存储在COOKIE中的PHPSESSID,也就是破坏了两个页面之间的会话联系,应该使用$_SESSION = array();消除会话id,使页面之间失去联系!
session_destroy();
程序清单1.1
<?php
session_start();
header('content-type:text/html;charset=utf-8');
$_SESSION['a'] = 'a';
$_SESSION['b'] = 'b';unset($_SESSION); //测试后,再注释下看看
$_SESSION['user'] = 'zhaofei299';
echo 'SESSION_ID: '.session_id().'
';
echo '<a href="3.php" target="_blank">测试下</a>';
?>
<?php
session_start();echo $_SESSION['user'];
echo session_id(); //会话变量改变了
?>会话id(session_id)的两种方式传递:
1.cookie
2.url因为默认session是基于cookie的,而cookie又是跟随http协议发送的,所以与cookie一样,在session_start()之前不能有任何输出!现在主要说一说第二种,通过 url 传递会话id
php中已经定义SID这个常量来得到 会话的id
sesssin_id 的使用!
<?php
session_start();
echo defined('SID')?'true':'false'; // true
echo SID; //什么也没有?
?>
为什么SID的值会是null 呢?是它哪里有问题了?
原因是因为 session 默认是基于 cookie 的,而 SID 只有 session_id 通过 url
传递数据时才会被赋值!
在浏览器中将 cookie 禁用,你就会发现 SID 有了输出,而不是 null!
删除session要三步实现.
<?php
session_destroy(); // 第一步: 删除服务器端session文件,这使用
setcookie(session_name(),'',time()-3600); // 第二步: 删除实际的session:
$_SESSION = array(); // 第三步: 删除$_SESSION全局变量数组
?>大家都知道session变量是保存在服务器端的,也就是说session的变量会保存在服务器中一个目录中,我们可以在php.ini中的session.save_path 那里可以找到session文件中保存的地址.默认的session的生存期是浏览的关闭就结束,但要知道会话过期结束后,当打开页面session_start()会判断会话id 是否存在,如果不存在就创建一个,否则将该会话id 的变量载入页面!因为过期session_id会被创建一个新的,但它保存在服务器端的session文件并没有被删除(关闭浏览器,打开session文件保存地看看),所以要用session_destory()函数清除会话id,并同时清除相应的会话文件,这样的话才能做到最彻底的清除!
session_id 使用 url 传递session 变量数据时,因为session_start()开启会话时会判断会话id 是否存在,如果不存在就创建一个,否则将该会话id 的变量载入页面!
而现在是使用url 来传递session_id,然而每一次 刷新/进入页面 都会生成一个会话id,所以页面之间就不能得到在另一页面设置过的session_id 的变量,那么使用 session也就没什么意义了!解决方法:在session_start()之前,手动设置页面的session_id,这样页面的就可以得到前一页中所设置的session变量的,也就实现了会话的传递,如下代码可以说明!
//已禁用 cookie1.php
<?php
session_start();
$_SESSION['user'] = 'zhaofei299';
echo '<a href="2.php?'.SID.'">下一页</a>';
?>1.php的第4行代码也可以写成:echo '<a href="2.php">下一页</a>';可以设置php.ini 中的 session.use_trans_sid 为1,这样当使用 url 传递会话 id 时,
浏览器会自动将 session_id 追加到 url 的后面!
就好像 在浏览器中 输入: www.cn-juking.com 一样,浏览器会自动将其更换成 http://www.cn-juking.com/2.php
<?php
session_id($_GET['PHPSESSID']); // 手动设置session_id,这种就可以使用前一个页面的session_id 的变量了,也就实现了会话!
session_start();
print_r($_SESSION);
?>常用session函数:bool session_start(void); 初始化session
bool session_destroy(void): 删除服务器端session关联文件。
string session_id() 当前session的id
string session_name() 当前存取的session名称,也就是客户端保存session ID的cookie名称.默认PHPSESSID。
array session_get_cookie_params() 与这个session相关联的session的细节.
string session_cache_limiter() 控制使用session的页面的客户端缓存
ini session_cache_expire() 控制客户端缓存时间
bool session_destroy() 删除服务器端保存session信息的文件
void session_set_cookie_params ( int lifetime [, string path [, string domain [, boolsecure [, bool httponly]]]] )设置与这个session相关联的session的细节
bool session_set_save_handler ( callback open, callback close, callback read, callbackwrite, callback destroy, callback gc )定义处理session的函数,(不是使用默认的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id
㈦ php函数设定参数类型
functionsin($value)
{
if(!is_bool($value))
{
echo"Warning:Notabooleanvalue!";
return;
}
//用户代码
//用户代码
//用户代码
}
跟楼上大同小异!加了个return!
㈧ php函数查询手册
php在线参考手册:http://www.veryhuo.com/a/manual/php/
㈨ 最简单 php 代码
<?php
mysql_query("insert into guahao values('".$name."','".$nl."','".$shouji."','".$sname."','".$info."')");
?>
㈩ 关于php的三个等号和两个等号的区别!
简单的说,两个等号是模糊等于也就是一般的等于,在php中不同的类型也是可以比较的,而这点在其他的强类型语言中是不行的。三个等号表示全等于,不但数值一样,而且类型也相同,如下面例子:
$a='';
$b=0;
if($a==$b){
echo'$a等于$b<br>';
}else{
echo'$a不等于$b<br>';
}
if($a===$b){
echo'$a全等于$b<br>';
}else{
echo'$a不全等于$b<br>';
}
/*
结果是:
$a等于$b
$a不全等于$b
*/
下面的图片是从php手册中截取的: