php
文章平均质量分 73
LSGOZJ
每天一个台阶!!!
展开
-
尾递归的学习
递归与尾递归总结 前言:今天上网看帖子的时候,看到关于尾递归的应用(http://bbs.csdn.net/topics/390215312),大脑中感觉这个词好像在哪里见过,但是又想不起来具体是怎么回事。如是乎,在网上搜了一下,顿时豁然开朗,知道尾递归是怎么回事了。下面就递归与尾递归进行总结,以方便日后在工作中使用。1、递归 关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地转载 2017-08-29 09:44:51 · 685 阅读 · 0 评论 -
PHP-redis中文文档
为了以后使用方便,这里转一波手册,方便以后查阅。转自 http://www.cnblogs.com/weafer/archive/2011/09/21/2184059.htmlphpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系很有用;以下是redis官方提供的命令使用技巧:下载地址如下:https://github.com/owlient/phpredis(支转载 2016-12-14 22:15:03 · 651 阅读 · 0 评论 -
PHP数据库保存session会话
前言:在默认的情况下,PHP会把全部的会话数据保存在服务器上的文本文件里面,这些文件通常都是保存在服务器上的临时目录里边。那为什么我们要把session会话保存在数据库中呢?主要原因:提高系统的安全性。在共享服务器上,在没有进行特别的设置,所有的网站站点都会使用同一个临时文件,这意味着数十个程序都在同一个位置对文件进行读写操作。不仅速度下降了,而且别人也有可能窃取到我的站点的用户数据。把会话数据原创 2016-06-12 13:41:42 · 3845 阅读 · 0 评论 -
对 PHP SESSION 的深刻认识(三)---- 数据库存储session
前言:本篇博客是继承自我的前面的两篇博客 《对 PHP SESSION 的深刻认识(一)》、《对 PHP SESSION 的深刻认识(二)》 而来的,主要是解决前面的问题。为什么要使用数据库保存 session 数据?就 php 来说,语言本身支持的 session 是以文件的形式保存在磁盘文件中,保存在指定的文件夹中,保存的路径可以在配置文件 php.ini 中设置。但是按照默认的存储方法是有很大原创 2016-12-11 15:54:18 · 1354 阅读 · 0 评论 -
PHP实现排序算法----快速排序算法优化
本篇博客主要是谈谈对前面 《PHP实现排序算法—-快速排序(Quick Sort)、快排》的优化问题,如果大家之前没有看过该篇博客,那么必须回去看看,因为这篇博客就是以前一篇博客为基础的。优化一:优化选取枢轴:在前面的复杂度分析的过程中,我们看到最坏的情况无非就是当我们选中的枢轴是整个序列的边缘值。比如这么一个序列:9 1 5 8 3 7 4 6 2按照习惯我们选择数原创 2016-11-23 22:56:00 · 3800 阅读 · 0 评论 -
PHP实现排序算法----快速排序(Quick Sort)、快排
基本思想:快速排序(Quicksort)是对冒泡排序的一种改进。他的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程可以递归进行,以达到整个序列有序的目的。基本算法步骤:举个栗子: 假如现在待排序记录是:6 2 7 3 8 9第一步、创建变量 $low 指向记录中的第一个记录原创 2016-11-23 21:56:35 · 10472 阅读 · 0 评论 -
对 PHP SESSION 的深刻认识(一)
前言:在不久之前,本人去参加了某公司的实习面试,其中 HR 问我关于 SESSION 实现的原理,当时我就懵逼了,因为在之前的开发中,我只知道 session 与 cookie 的区别在于:session 是保存在服务器端,cookie 保存在客户端。那 session 在服务端是怎么样保存的?session_id 又是什么?等等。我当时答不上来。回来后决定把这些搞懂。为什么要使用 SESSION?原创 2016-12-04 15:38:46 · 2240 阅读 · 1 评论 -
对 PHP SESSION 的深刻认识(二)
前言:本篇博客是以我之前的一篇博客 《对 PHP SESSION 的深刻认识(一)》 为基础的,如果你没有阅读该篇博客,建议你回头看看。在 《对 PHP SESSION 的深刻认识(一)》 的最后,我们提到在应用 session 时可能会遇到的问题:session 多服务器共享的问题,假如有多台 php 服务器进行负载均衡的时候,用户登录时访问的是第一台服务器,没准下一个页面访问的是第二台服务器,原创 2016-12-07 20:18:26 · 914 阅读 · 1 评论 -
php类文件自动载入(autoload)
php实现类文件自动载入有两种办法:魔术方法:__autoload();SPL标准库提供的spl_autoload_register();一、__autoload()__autoload()是php中的一个魔术方法,在代码中当调用不存在的类时会自动调用该方法。假如现在有以下两个类文件://Test1.php文件<?phpclass Test1{ static function te原创 2016-10-06 15:49:41 · 8777 阅读 · 0 评论 -
PHP实现排序算法----直接插入排序(Straight Insertion Sort)
算法引入:在这里我们依然使用《大话数据结构》里面的一个例子: 扑克牌是我们几乎每个人都玩过的游戏。平时我们开始的时候一般都是一个人发牌,其他人都是一边摸牌,一边理牌,假如你摸上的第一张牌是 5,第二张牌是 3,自然而然的我们把 3 插到 5 的前面;第三张牌是 4,查到 3 和 5 的中间;第四张牌是 6,放到 5 的后面;第五张牌是 2,插到 3 的前面;……。最后当我们摸完所有的牌时,手上的原创 2016-11-07 22:27:22 · 3112 阅读 · 2 评论 -
PHP实现排序算法----简单选择排序(Simple Selection Sort)
基本思想:通过 n - i 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i (1 <= i <= n) 个记录交换,执行n-1趟 后就完成了记录序列的排序。算法实现:<?php//简单选择排序//交换函数function swap(array &$arr,$a,$b){ $temp = $arr[$a]; $arr[$a] = $arr[$b];原创 2016-11-07 21:49:20 · 1569 阅读 · 0 评论 -
PHP实现排序算法----冒泡排序(Bubble Sort)
基本思想:冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。简单交换排序:我们先来看看在没有学习各种排序方法前经常使用的排序方法(至少我是这样。。。。)://这里使用了类型提示(type hint) array,不熟悉或者不习惯的同学大可去掉,不影响运算结果function MySort(array &$arr){ $length =原创 2016-11-07 21:01:36 · 7582 阅读 · 0 评论 -
用PHPMailer例子安装和使用PHP依赖管理工具:Composer
前言:本篇博客主要是给大家介绍Composer的安装和使用,并用加载PHPMailer代码库为例子给大家做演示。环境:Centos7 + LAMP由于例子中涉及到PHP发邮件,所以在开始本博客之前,建议大家先去阅读我的上一篇博客:《PHP中利用PHPMailer配合QQ邮箱实现发邮件》一、准备工作:现在我们在WWW目录下新建一个testMail目录,在testMail文件夹里新建index.php文原创 2016-10-27 09:16:49 · 7387 阅读 · 1 评论 -
利用PHP实现二叉树的图形显示
前言:最近老师布置了一个作业:理解并实现平衡二叉树和红黑树,本来老师是说用C#写的,但是我学的C#基本都还给老师了,怎么办?那就用现在最熟悉的语言PHP来写吧!有一个问题来了,书上在讲解树的时候基本上会给出形象的树形图。但是当我们自己试着实现某种树,在调试、输出的时候确只能以字符的形式顺序地输出。这给调试等方面带来了很大的不便。然后在各种百度之后,我发现利用PHP实现二叉树的图形显示的资源几乎是零!原创 2016-10-21 12:49:29 · 6100 阅读 · 11 评论 -
对 redis 主从同步初认识
前言:最近在学习 redis,然后看到了 redis 主从同步这块,正好手上有一个 Centos 服务器和一台 Ubuntu 笔记本,并且都被我装了 redis,那就试试呗。主从同步:主从同步可以防止主机(Master)坏掉导致网站不能正常工作,这种方法即把从机(Slave)设置为主机即可。redis 支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制,并且配置很原创 2016-12-14 20:19:26 · 717 阅读 · 0 评论 -
对 PHP SESSION 的深刻认识(四)---- 缓存(memcache和redis)存储session
本篇博客将带着大家实现使用缓存系统来存储 session 数据,其中会介绍两个缓存系统 :memcache 和 redis。一、使用 memcache:如果大家有看过我之前的这篇博客 《memcache 和 memcached 的区别分析》,就会发现,PHP两个扩展中的 memcached 工作的更好,因此这篇博客在使用 memcache 服务时我选择的是 memcached 扩展。1、使用 mem原创 2016-12-13 21:14:08 · 2371 阅读 · 1 评论 -
memcache 和 memcached 的区别分析
前言:其实之前 LZ 有简单和学习和使用过 memcache ,但是也仅仅限于简单层面。然后最近要使用到 memcache,所以重新温习了一遍,在这里简单总结一下关于 memcache 和 memcached 的区别,大神路过就别踩了。。。区别分析:其实我们这里所说的 memcache 和 memcached 说的是 PHP 的扩展,假如我们要在 PHP 中使用 memcache ,我们肯定是先在原创 2016-12-12 21:12:14 · 14243 阅读 · 1 评论 -
单链表排序
前言:最近总结了一下针对只有头结点的单链表进行排序的几个简单的方法。交换节点:插入排序,冒泡排序,简单选择排序 交换数据:快速排序初始化:#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//节点结构struct node{ int val; struct node * next;};typedef str转载 2017-09-03 20:38:22 · 52440 阅读 · 17 评论 -
单点登录SSO
一、什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录 一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。二、单点登录解决了什么问题 解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。三、单点登录的技术实现机制 如下图所示:转载 2017-08-05 21:57:42 · 671 阅读 · 0 评论 -
PHP实现排序算法----基数排序(Radix Sort)
基数排序在《大话设计模式》中并未讲到,但是为了凑齐八大排序算法,我自己通过网络学习了这个排序算法,并给大家分享出来。基本思想:基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复原创 2016-11-23 20:29:14 · 1787 阅读 · 0 评论 -
一致性 Hash 算法学习(分布式或均衡算法)
简介:一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 场景引入:比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个转载 2016-12-15 20:17:54 · 7686 阅读 · 5 评论 -
PHP手动实现数组转 JSON
问题:由于最近的一个项目中要给别的公司提供接口,给他们喂 GBK 编码的 json 数据,但是有一个问题是 PHP 中的 json_encode 加密函数只支持 utf-8 编码,这就比较尴尬了。我们的数据是 GBK 编码的,接收方要求的数据格式也是 GBK 编码的,一开始想的是先将数据转为 utf-8 编码再使用 json_encode 函数,结果是这导致我们的中文内容乱码了,所以,最后使用的是手原创 2017-07-19 12:55:26 · 721 阅读 · 1 评论 -
http状态码301和302详解及区别
一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各种资料了解后,算是有了一定的理解。这里记录下,希望能有新的认识。大家也共勉。官方的比较简洁的说明: 301 redirect: 301 代表永久性转移(Permanently Moved) 302 redirect: 302 代表暂时性转移(Temporarily Moved ) ps:这里也顺带记住了两转载 2017-05-04 22:02:40 · 4463 阅读 · 1 评论 -
PHP实现排序算法----堆排序(Heap Sort)
算法引进:在这里我直接引用《大话数据结构》里面的开头:在前面讲到 简单选择排序 ,它在待排序的 n 个记录中选择一个最小的记录需要比较 n - 1 次,本来这也可以理解,查找第一个数据需要比较这么多次是正常的,否则如何知道他是最小的记录。可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后一趟的比较重,有许多比较在前一趟已经做过了,但由于前一趟排序时未保存这些比较结果,所以后一趟排序时又重复执原创 2016-11-08 21:13:33 · 4679 阅读 · 1 评论 -
PHP二叉树(一):二叉搜索树
关于二叉搜索树的原理网上的资源就挺多的,而且情况有点小复杂,所以在这里我就不再陈述了,直接上代码吧:#bst.php 文件<?php/** * author:zhongjin * time:2016/10/20 11:53 * description: 二叉查找树 *///结点class Node{ public $key; public $parent; p原创 2016-10-26 21:34:04 · 4155 阅读 · 0 评论 -
PHP实现排序算法----希尔排序(Shell Sort)
基本思想:希尔排序是指记录按下标的一定增量分组,对每一组使用 直接插入排序 ,随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至 1 时,整个序列恰好被分成一组,算法便终止。操作步骤:先取一个小于 n(序列记录个数) 的整数 d1 作为第一个增量,把文件的全部记录分组。所有距离为 d1 的倍数的记录放在同一个组中。先在各组内进行 直接插入排序;然后,取第二个增量 d2 < d1 重复上述的分组原创 2016-11-08 19:04:51 · 3329 阅读 · 1 评论 -
PHP有序表查找----插值查找
前言:在前面我们介绍了二分查找,但是我们考虑一下,为什么一定要折半呢?而不是折四分之一或者更多?打个比方,在英文词典里查找“apple”,你下意识里翻开词典是翻前面的书页还是后面的书页呢?如果再查“zoo”,你又会怎么查?显然你不会从词典中间开始查起,而是有一定目的地往前或往后翻。同样,比如要在取值范围在 0 ~ 10000 之间的100个元素从小到大均匀分布的数组中查找5,我们自然而然地先考虑数组原创 2016-11-06 22:33:39 · 1123 阅读 · 0 评论 -
PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)
前言:深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深度优先遍历比较特殊,可以细分为先序遍历、中序遍历、后序遍历。具体说明如下:前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树后序遍历:左子树->右子树->根节点广度优先遍历:又叫层次遍历,从上往下对每一层依次访问,在每一层中,从左往右(也可以从右往左)访问原创 2016-10-28 09:16:12 · 9995 阅读 · 1 评论 -
php 数组去重
1、使用array_unique方法进行去重对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重。<?php $arr = array(1,1,2,3,3,3,4,4,5,6,6,7,8,8,9,9,9); $arr = array_unique($arr); $arr = array_values($arr); prin转载 2016-12-28 19:50:59 · 966 阅读 · 0 评论 -
PHP实现排序算法----归并排序(Merging Sort)
基本思想:归并排序:就是利用归并(合并)的思想实现的排序方法。它的原理是假设初始序列含有 n 个元素,则可以看成是 n 个有序的子序列,每个子序列的长度为 1,然后两两归并,得到 ⌈ n / 2⌉ (⌈ x ⌉ 表示不小于 x 的最小整数)个长度为 2 或 1 的有序序列;再两两归并,······,如此重复,直至得到一个长度为 n 的有序序列为止,这种排序方法就成为 2 路归并排序。一、归并的过程:原创 2016-11-27 13:47:14 · 8489 阅读 · 1 评论 -
PHP二叉树(三):红黑树
关于红黑树的原理网上的资源就挺多的,而且情况有点小复杂,所以在这里我就不再陈述了,直接上代码吧:<?php/** * author:zhongjin * time:2016/10/20 11:53 * description: 红黑树 *///结点class Node{ public $key; public $parent; public $left;原创 2016-10-26 21:53:56 · 3625 阅读 · 0 评论 -
PHP二叉树(二):平衡二叉树(AVL)
关于平衡二叉树的原理网上的资源就挺多的,而且情况有点小复杂,所以在这里我就不再陈述了,直接上代码吧:<?php/** * author:zhongjin * time:2016/10/20 11:53 * description: 平衡二叉树 *///结点class Node{ public $key; public $parent; public $left原创 2016-10-26 21:43:54 · 2106 阅读 · 1 评论 -
PHP有序表查找----斐波那契查找
前言:在前面我们介绍了二分查找、插值查找。其中的插值查找是对二分查找的改进。同样,本篇博客的主角—-斐波那契查找,也是对二分查找的改进(利用黄金分割原理)。由于这个过程分析较之前的复杂,大家可以百度。代码:<?php//斐波那契查找 利用黄金分割原理//算法核心://1、当$num==$arr[$mid],查找成功//2、当$num < $arr[$mid],新范围是第$low个到$mid-1个原创 2016-11-06 22:44:50 · 581 阅读 · 0 评论 -
php中工厂方法的两个特殊例子
工厂方法,简单来说就是生成包含类的实例的一种方法。 工厂模式是最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。 这里附上一个比较特殊的例子: 我们要创造一个地球人,地球有两种人,男人和女人:<?php//实现工厂方法interface abstracted{ public function realCreate();}//女人类class Wuman{ p转载 2015-12-23 19:05:10 · 124 阅读 · 0 评论 -
PHP面向对象中类方法的两种类型:2、对象类型(获得提示)
正如上一篇中所说,参数变量可以包含任何基本数据类型z,参数默认情况下也是可以包含任何类型的对象。这其中PHP根据语境自动转换数据类型起了一部分作用。这种灵活性有它的好处,但是在方法定义中可能会出现一些问题。如下所示://定义一个书的类class Book{ public $title; public $author; //构造函数 function __constr原创 2015-11-05 19:06:23 · 2059 阅读 · 0 评论 -
PHP实现mysql事务处理
想要实现事务管理,操作的表引擎类型必须是 InnoDB 类型,在生成表的时候就要声明,因为 mysql 默认引擎是 MYISAM ;当然,你也可以在生成表之后修改表的引擎:ALTER TABLE orders ENGINE=INNODB;更多详细可以参照我的另一篇博客:《关于mysql管理事务处理》,这里用到的表都是那篇博客中创建的表。下面先写一个小栗子(往orders表和orderdetail表存原创 2015-12-22 00:37:06 · 2795 阅读 · 0 评论 -
PHP命名空间(namespace)的使用详解
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结。命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment。之后我可能想要增加对所有用户留言的转载 2015-12-29 14:53:25 · 666 阅读 · 0 评论 -
关于PHP中类方法的重载问题
重载:是类的多态的一种实现。函数重载指一个标识符被用作多个函数名,且能够通过函数的参数个数或参数类型将这些同名的函数区分开来,调用不发生混淆。这样做的主要好处就是,不用为了对不同的参数类型或参数个数,而写多个函数。 也就是说,我们可以用同一个函数名定义多个同名方法,在我们调用这个函数的时候,就会根据参数列表的个数和参数类型来区分调用。 重载一般在强类型语言中比较常见,例如我在下面用C#来实现类方原创 2015-11-13 16:19:43 · 2684 阅读 · 0 评论 -
关于PHP如何用代码删除Runtime下的文件,做到物理删除缓存
public function deltree($pathdir) { echo $pathdir;//我调试时用的 if($this->is_empty_dir($pathdir)){//如果是空的 rmdir($pathdir);//直接删除 }else{//否则读这个目录,除了.和..外转载 2015-09-20 19:51:19 · 2906 阅读 · 0 评论 -
PHP面向对象:延迟静态绑定(static关键字)
最近看到了PHP面向对象中的延迟静态绑定这块,注意:php5.3之前没有引入延迟静态绑定,所以版本较低的童鞋可能用不了。 这里我们用一个简单的工厂方法(生成包含类的实例的一种方法)来说明//定义一个抽象方法作为父类abstract class ParentClass{ //....}//子类Userclass User extends ParentClass{ //定义一个原创 2015-11-08 14:27:36 · 793 阅读 · 0 评论