未来往事
最怕的东西你就应该去突破。 [2018年 第39周/共52周]
当前分类:PHP 第4页,本分类下收藏如下文章:PHP相关技术文章

thinkphp去重统计数据sql

DISTINCT 方法用于返回唯一不同的值

官方文档给出的示例:

  1. $Model->distinct(true)->field('userName')->
......
+阅读全文

urlencode与urldecode使用

urlencode与urldecode使用
例如,URL地址:http://fity.cn?test.php&num=8#88
一般这种情况我们会对url进行编码后传送,以便能完整的获取到数据:
  1. http://fity.cn/test.php?num=<?php echo urlencode('8#88');?>  

在取num数据时使用:
  1. $num = urldecode(
......
+阅读全文

IIS下PHP is_dir()/mkdir() 绝对路径目录BUG

is_dir('/abc');正常情况下应该是判断web应用根目录下是否有test存在。但在IIS下,这时判断的是分区根目录。

如果用mkdir('/abc')建立的目录将跑到分区根目录下去。

所以,IIS下php目录相关的操作,现在只能用相对路径或者物理路径。......
+阅读全文

手机号码中间四位用*屏蔽 php

php屏蔽电话号码中间四位
  1. Method 1:  
  2. function hidtel($phone){  
  3.     $IsWhat = preg_match('/(0[0-9]{2,3}[\-]?[2-9][0-9]{6,7}[\-]?[0-9]?)/i',$phone); 
......
+阅读全文

ThinkPHP联表查询/关联查询

ThinkPHP联表查询/关联查询/多表查询可以使用 table() 方法或和join方法:

原生查询:
  1. $Model = new Model();  
  2. $sql = 'select a.id,a.title,b.content  from think_test1 as a, think_test2 as b where a.id=b.id '<
......
+阅读全文

php获取mysql字段名称及其详细信息

首先我们需要了解下查询MySQL数据库/表相关信息的SQL语句:

  1. SHOW DATABASES //列出 MySQL Server 数据库。
  2. SHOW TABLES [FROM db_name] //列出数据库数据表。
  3. <
......
+阅读全文

php数组编码转换函数

场景说明/问题描述:
Ajax提交页面编码为gb2312,数据库编码为utf8,在不更改页面及数据库编码的情况下插入数据。

自定义函数:
  1. function array_iconv($in_charset,$out_charset,$arr){      
  2.         return&n
......
+阅读全文

PHP数组 二级菜单

PHP多级菜单 foreach循环数组二级菜单
PHP多级菜单数组循环实现


  1. $navlist = array(    //一级菜单  
  2.     '1'=>array('name'=>'内容管理',
......
+阅读全文

CI增加类似ThinkPHP的success、error提示

CodeIgniter预定义全局success、error提示

首先找到CI的公共函数类/全局函数类文件:/system/core/Common.php
这里在该文件最底部添加如下代码:
  1. /** 
  2. * 成功跳转函数 
  3. * @access  public 
  4. * @param  mixed 
......
+阅读全文

PHP随机可逆加密解密函数

这里假设加密解密函数文件为:encrypt.function.php:
  1. //加密函数  
  2. function passport_encrypt($txt$key) {  
  3.   srand((double)microtime() * 1000000);  
  4.   
......
+阅读全文

authcode - discuz加密解密函数

authcode 是使用异或运算进行加密和解密,原理如下。这里我们假设:
加密如下
明文:1010 1001
密匙:1110 0011
密文:0100 1010
得出密文0100 1010,解密之需和密匙异或下就可以了

解密如下
密文:0100 1010
密匙:1110 0011
明文:1010 1001
并没有什么高深的算法,密匙重要性很高,所以,关键在于怎么生成密匙。下面我们看下具体的用法:
  1. /** 
  2.  * $string 明文或密文 
......
+阅读全文

浅析HTTP会话控制: php session与cookie

本文介绍了PHP会话控制,主要阐述以下几点内容:
会话控制的产生背景/概念
cookie的维护与生命周期(有效时间)
session的维护与生命周期(回收机制)
cookie与session之间的区别与联系
问题1:禁用cookie后session为什么会失效?
问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器正常)
session、cookie简单实例

▶ 本文最后更新:2014-01-23(更新内容‘问题2’

● 理解会话控制的概念

理解一个概念就需要理解他的背景及产生的原因,这里引入WEB环境及其HTTP协议。会话控制产生的背景:
阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是独立的,不持久的。也就是说HTTP协议没有一个内建的机制来维护两个事务之间的状态或者说是关系吧。当一个用户在请求一个页面后再去请求另外一个页面时,HTTP将无法告诉我们这两个请求是否来自同一个用户。

由此我们就会觉得很奇怪了,平时我们在论坛逛帖子或电商网站购物时,只要我们在这个站点内,不论我们怎么跳转,从一个页面跑到另一个页面,网站总会记得我是谁,比如告诉你购买了哪些东西。这是怎么做到的呢,估计大家猜到了,这就是运用了HTTP会话控制。在网站中跟踪一个变量,通过对变量的跟踪,使多个请求事物之间建立联系,根据授权和用户身份显示不同的内容、不同页面。

PHP Session会话控制:
PHP的session会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字,由PHP生成,在会话的生命周期中都会保存在客户端。我们知道客户端(也就是浏览器)保存数据的地方只有cookie,所以PHP的会话ID一般保存在用户机器的cookie中。了解cookie后我们知道,浏览器是可以禁用cookie的,这样会话就会失效。所以PHP会话控制还有一种模式,就是在URL中传递会话ID。如果在浏览网站时我们稍加留心的话,有些URL中有一串看起来像随机数字的字符串,那么其实很有可能就是URL形式的会话控制。

讲到这里,有些人可能会有疑问了,客户端只是保存一个会话ID,那么会话控制中保存的会话变量比如你购物时买的物品列表等,它们是存放在哪个地方的呢?很显然,会话变量是在服务器端使用的,那么这些会话变量必定存放在服务器端。默认情况下,会话变量保存在服务器的普通文件中(也可以自己配置使用数据库来保存,可以Google一下),会话ID的作用就像是一把钥匙,在服务器端保存会话的文件中找到该会话ID对应的会话变量,比如购买物品的列表。

那么会话控制的整个过程可能就像这个样子,用户登录或者第一次浏览某个站点的页面时,该站点会生成一个PHP的会话ID并通过cookie发送到客户端(浏览器)。当用户点击该站点的另一个页面时,浏览器开始连接这个URL。在连接之前,浏览器会先搜索本地保存的cookie,如果在cookie中有任何与正在连接的URL相关的cookie,就将它提交到服务器。而刚好在登陆或第一次连接时,已经产生了一个与该网站URL相关的cookie(保存的会话ID),所以当用户再次连接这个站点时,站点就可以通过这个会话ID识别出用户,从服务器的会话文件中取出与这个会话ID相关的会话变量,从而保持事务之间的连续。


接下来我们了解下两个重要的概念:cookie和session

● 关于cookie的维护与生命周期

cookie是在服务器端被创建并写回到客户端浏览器,浏览器接到响应头中关于写cookie的指令则在本地临时文件夹中
创建了一个cookie文件,其中保存了你的cookie内容,cookie内容的存储是键值对的方式,键和值都只能是字符串。例如:
文件:Cookie:administrator@localhost/
内容格式:voteID100101localhost/15361167667230343893360385046430343691*

cookie的创建:
setcookie()函数设置cookie,函数原型如下
setcookie(name, value, expire, path, domain);
注释:cookie标题头必须在发送其他标题头之前发送,否则就无效(这是cookie的限制,而不是PHP的限制)。在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie() 取而代之)。

cookie的维护:
cooke有四个标识符:cookie的name,domain,path,secure标记。要想在将来改变这个cookie的值,需要发送另一个具有相同cookie name,domain,path的Set-Cookie消息头,这将以一个新

的值来覆盖原来cookie的值。然而,如果仅仅只是改变这些选项的某一个也会创建一个完全不同的cookie,如只是更改了name值。

cookie失效时间:
可以设置过期时间,如果不设置则是会话级别的,即关闭浏览器就会消失。当cookie创建时包含了失效日期,这个失效日期则关联了以name-domain-path-secure为标识的cookie。要改变一个cookie的失效日期,你必须指定同样的组合。当改变一个cookie的值时,你不必每次都设置失效日期,因为它不是cookie标识信息的组成部分。例如:
  1. setcookie(vote ,$id+1,time()+3600*24);  
  2. setcookie(vote,$id);  
在cookie上的失效日期并没有改变,因为cookie的标识符是相同的。实际上,只有你手工的改变cookie的失效日期,否则其失效日期不会改变。这意味着在同一个会话中,一个会话cookie可以变成一个持久化cookie(一个可以在多个会话中存在的),反之则不可。为了要将一个持久化cookie变为一个会话cookie,你必须删除这个持久化cookie,这只要设置它的失效日期为过去某个时间之后再创建一个同名的会话cookie就可以实现。

需要记得的是失效日期是以浏览器运行的电脑上的系统时间为基准进行核实的。没有任何办法来来验证这个系统时间是否和服务器的时间同步,所以当服务器时间和浏览器所处系统时间存在差异时这样的设置会出现错误。

cookie自动删除:
cookie会被浏览器自动删除,通常存在以下几种原因:
会话cooke(Session cookie)在会话结束时(浏览器关闭)会被删除
持久化cookie(Persistent cookie)在到达失效日期时会被删除,如:
  1. setcookie("vote""", time()-3600);  
如果浏览器中的cookie限制到达,那么cookies会被删除以为新建cookies创建空间。

● 关于session的维护与生命周期

+阅读全文

PHP将数组元素组合为字符串函数:implode

版本:PHP4, PHP5
string implode ( string $glue , array $pieces )
string implode ( array $pieces )
implode() 函数将一个一维数组元素合为一个字符串,并返回该字符串。其内容为由 glue 分割开的数组的值。

参数说明:
glue:默认为空的字符串
pieces:你想要转换的数组
备注:4.3.0开始glue 变为可选参数。

范例:
  1. $park = Array  
  2. (  
......
+阅读全文

输入内容过滤 PHP

PHP内容过滤方法,过滤没用的信息比较严格,有用的可能也输入不进去,可以从网上找找其他的过滤方法:
  1. function checkHtml($data){  
  2.   $ret  = preg_match("/['.,:;*?~`!@#$%^&+=)(<>{}]|\]|\[|\/|\\\|\"|\|/",$data);  
  3.  &
......
+阅读全文

select分组与默认选择项

select分组与默认选择实现方式 php

  1. 分类:  
  2. <select name="type">  
  3.   <option value="">请选择分类</option>  
  4.   <optgroup label="最具影响家居卖场">  
......
+阅读全文