php cookie使用教程

 更新时间:2016年11月25日 15:13  点击:2129
本文章主要以一个cookie的实现来讲述php对cookie的设置时间,读取以及删除等

function PutCookie($key,$value,$kptime=0,$pa="/")
{
 global $cfg_cookie_encode;
 setcookie($key,$value,time()+$kptime,$pa);
 setcookie($key.'__ckMd5',substr(md5($cfg_cookie_encode.$value),0,16),time()+$kptime,$pa);
}

function DropCookie($key)
{
 setcookie($key,'',time()-360000,"/");
 setcookie($key.'__ckMd5','',time()-360000,"/");
}

function GetCookie($key)
{
 global $cfg_cookie_encode;
 if( !isset($_COOKIE[$key]) || !isset($_COOKIE[$key.'__ckMd5']) )
 {
  return '';
 }
 else
 {
  if($_COOKIE[$key.'__ckMd5']!=substr(md5($cfg_cookie_encode.$_COOKIE[$key]),0,16))
  {
   return '';
  }
  else
  {
   return $_COOKIE[$key];
  }
 }
}

关于$i++与++$i是什么区别了,下面来看看这些区别的分别。

<?php
方式一:

$begin = time();
$i = 0;
while(++$i < 10000)
{
$j = 0;
  while(++$j < 10000)
    ;
  ;
}
$end = time();

时间 : 16s

方式二:

$begin = time();
$i = 0;
while($i < 10000)
{
$j = 0;
  while($j < 10000)
    ++$j;
  ++$i;
}
$end = time();

时间:13s

方式三:

$begin = time();
$i = 0;
while($i < 10000)
{
$j = 0;
  while($j < 10000)
$j++;
  $i++;
}
$end = time();


时间:15s

 

方式四:

$begin = time();
$i = 0;
while($i++ < 10000)
{
$j = 0;
  while($j++ < 10000)
    ;
  ;
}
$end = time();
时间:13s


呵呵, 为什么会这样呢?
对比第一种方法和第二种方法, 因为在PHP中, 最终被执行的是OPCODE, 每行opline都有俩个操作数, 对于操作数来说, 一般有3种类型的存取方式, 临时变量, 变量, 和编译时变量, 这三种变量其中, 存取最快的是第三种, 编译器变量, 在OpCode执行过程中, 会讲一个变量的加一级引用存储在一个hash结构中, 用来加快存取速度.
在第一种方法中:
$i = 0;
while(++$i < 10000)
{
$j = 0;
  while(++$j < 10000)
    ;
  ;
}


因为对于++$i来说, 我们需要得到它的返回值, 来和10000做比较, 这样就会使得PHP在编译的时候 , 生成一个变量(IS_VAR), 来保存自增的结果 , 也就是说, 这个时候用到了opline的return操作数.
然后, PHP会拿这个变量(IS_VAR)来和10000做比较.
而对于第二种方式:
$i = 0;
while($i < 10000)
{
$j = 0;
  while($j < 10000)
    ++$j;
  ++$i;
}


这个过程中, $i已经优化成了编译变量(IS_CV), 而对于++$i, 因为我们不需要保存他的返回值, 所以也只是直接对编译变量进行自增..
也就是说, 方法一和方法二的速度差异, 就在于 对于方式二, 我们一直都在实用编译变量.. 编译变量的存取速度远快于变量(IS_VAR)
再来看第三种和第四种方式:
//3:
$i = 0;
while($i < 10000)
{
$j = 0;
  while($j < 10000)
$j++;
  $i++;
}
//4:
$i = 0;
while($i++ < 10000)
{
$j = 0;
  while($j++ < 10000)
    ;
  ;
}


我们知道后缀自增(POST_INC), 会返回一个对原值的copy, 然后自增.
对于第四种方式, $i++以后, ZE会将$i的原值, 存储在一个临时变量(IS_TMP_VAR). 并且会拿这个临时变量和10000对比.
所以, 严格来讲, 这部分的速度比起第一种方式来说是会慢一些的.

这里提供了一款php 中文字符截取代码哦,包括对中文,asc,utf-8等字符进行截取功能哦。

//中文截取2,单字节截取模式
//如果是request的内容,必须使用这个函数
function cn_substrR($str,$slen,$startdd=0)
{
 $str = cn_substr(stripslashes($str),$slen,$startdd);
 return addslashes($str);
}

//中文截取2,单字节截取模式
function cn_substr($str,$slen,$startdd=0)
{
 global $cfg_soft_lang;
 if($cfg_soft_lang=='utf-8')
 {
  return cn_substr_utf8($str,$slen,$startdd);
 }
 $restr = '';
 $c = '';
 $str_len = strlen($str);
 if($str_len < $startdd+1)
 {
  return '';
 }
 if($str_len < $startdd + $slen || $slen==0)
 {
  $slen = $str_len - $startdd;
 }
 $enddd = $startdd + $slen - 1;
 for($i=0;$i<$str_len;$i++)
 {
  if($startdd==0)
  {
   $restr .= $c;
  }
  else if($i > $startdd)
  {
   $restr .= $c;
  }

  if(ord($str[$i])>0x80)
  {
   if($str_len>$i+1)
   {
    $c = $str[$i].$str[$i+1];
   }
   $i++;
  }
  else
  {
   $c = $str[$i];
  }

  if($i >= $enddd)
  {
   if(strlen($restr)+strlen($c)>$slen)
   {
    break;
   }
   else
   {
    $restr .= $c;
    break;
   }
  }
 }
 return $restr;
}

//utf-8中文截取,单字节截取模式
function cn_substr_utf8($str, $length, $start=0)
{
 if(strlen($str) < $start+1)
 {
  return '';
 }
 preg_match_all("/./su", $str, $ar);
 $str = '';
 $tstr = '';

 //为了兼容mysql4.1以下版本,与数据库varchar一致,这里使用按字节截取
 for($i=0; isset($ar[0][$i]); $i++)
 {
  if(strlen($tstr) < $start)
  {
   $tstr .= $ar[0][$i];
  }
  else
  {
   if(strlen($str) < $length + strlen($ar[0][$i]) )
   {
    $str .= $ar[0][$i];
   }
   else
   {
    break;
   }
  }
 }
 return $str;
}

这个是一个相当全的用php 获得当前的文件url地址哦,好了费话不说多了来看看这款代码吧。

获得当前的脚本网址


function GetCurUrl()
{
 if(!empty($_SERVER["REQUEST_URI"]))
 {
  $scriptName = $_SERVER["REQUEST_URI"];
  $nowurl = $scriptName;
 }
 else
 {
  $scriptName = $_SERVER["PHP_SELF"];
  if(empty($_SERVER["QUERY_STRING"]))
  {
   $nowurl = $scriptName;
  }
  else
  {
   $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
  }
 }
 return $nowurl;
}

这个是昨天写的一个简单的用仿dedecms风格的生成静态页面的php生成静态页面文件程序代码哦,只是简单的。

function makeHtml($msgContent,$filePath,$fileName){//生成html文件  


  if(!is_dir($filePath)){@mkdir($filePath);}   


  $handle = fopen(str_replace('\','../',$filePath.$fileName),'w+') or die("can't create file!$fileName");


  fwrite($handle,$msgContent);


  fclose($handle);  


}

function md5_filename($fileid,$fileztype,$fileuid){//文件加密方法
   return md5($fileid.$fileztype.$fileuid).'.htm';
}
 
function getSql(){//一次多少生成htm文件
  global $limit,$start,$id;
  $sysType = '';  
  if( !empty( $id ) ){
   $sysType = "And systype = $id";
  }
  $sql = "select * from filecontent where siteindex=1 $sysType limit $start,$limit";
  $result = mysql_query($sql) or die('Query error');
   while( $rs = mysql_fetch_array($result) ){
     $fileName =md5_filename($rs[0],$rs['z_type'],$rs['filesendid']);
     $path = get_path($rs['systype']).$rs['z_type'].'/';    
     $parent = substr(getcwd(),0,strrpos(getcwd(),'\'));    
     $filePath =$parent.'\'.$path;
     makeHtml($rs['content'],$filePath,$fileName);
   }
   mysql_free_result($result);
}
 

$info = "<script language="javascript">
   var pgo =0;
   function JumpUrl(){    
    document.write('己生成文件<a href=make_html.php?id=$id&start=$start&limit=$limit&end=$end>如果浏览器无反应请点击这里</a>');
    location='make_html.php?id=$id&start=$start&limit=$limit&end=$end';    
   }
   setTimeout('JumpUrl()',100);
   </script>";
 
  if($start>$end){
   die('完成所有生成任务!');
  } else {
   getSql(); 
   echo $info;  
  }

[!--infotagslink--]

相关文章

  • phpems SQL注入(cookies)分析研究

    PHPEMS(PHP Exam Management System)在线模拟考试系统基于PHP+Mysql开发,主要用于搭建模拟考试平台,支持多种题型和展现方式,是国内首款支持题冒题和自动评分与教师评分相...2016-11-25
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • JS使用cookie实现DIV提示框只显示一次的方法

    本文实例讲述了JS使用cookie实现DIV提示框只显示一次的方法。分享给大家供大家参考,具体如下:这里运用JavaScript的cookie技术,控制网页上的提示DIV只显示一次,也就是当用户是第一次打开网页的时候才显示,第二次自动隐藏起...2015-11-08
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • php类的使用实例教程

    php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • 双冒号 ::在PHP中的使用情况

    前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08
  • PHP中SSO Cookie登录分析和实现

    什么是SSO?单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护...2015-11-08
  • PHP mysql与mysqli事务使用说明 分享

    mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。...2013-10-02