
PHP
文章平均质量分 75
code301
后端工程师,目前工作中使用的语言为PHP,Golang,C#
敬畏每一行代码
展开
-
深入理解 PHP 的 7 个预定义接口
深入理解预定义接口场景:平常工作中写的都是业务模块,很少会去实现这样的接口,但是在框架里面用的倒是很多。1. Traversable(遍历)接口该接口不能被类直接实现,如果直接写了一个普通类实现了该遍历接口,是会直接报致命的错误,提示使用 Iterator(迭代器接口)或者 IteratorAggregate(聚合迭代器接口)来实现,这两个接口后面会介绍;所有通常情况下,我们只是会用来判...原创 2020-04-16 23:05:42 · 23417 阅读 · 0 评论 -
微服务架构下的鉴权,怎么做更优雅?
从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验。为了适应架构的变化、需求的变化,身份认证与鉴权方案也在不断的变革。面对数十个甚至上百个微服务之间的调用,如何保证高效安全的身份认证?面对外部的服务访问,该如何提供细粒度的鉴权方案?本文将会为大家阐述微服务架构下的安全认证与鉴权方案。一、单体应用 VS 微服务随着微服务架构的兴起,传统的单体应用场景下的身份认证...转载 2019-07-03 11:23:07 · 5976 阅读 · 0 评论 -
控制反转,依赖注入概念理解
我们先来介绍控制反转,依赖注入,这两个概念我们可以认为他们表达的同一种意思,举个通俗的例子,我们用户登录需要提供记录日志的功能,可以选择使用文件或者数据库。下面我们用代码来演示。// 定义写日志的接口规范interface log{ public function write(); }// 文件记录日志class FileLog implements Log{ ...转载 2019-07-03 11:11:18 · 487 阅读 · 0 评论 -
PHP 设计模式(全)
PHP设计模式 :https://learnku.com/docs/php-design-patterns/2018PHP之道 :https://laravel-china.github.io/php-the-right-way/原创 2019-07-02 16:40:27 · 500 阅读 · 0 评论 -
PHP文件缓存实现
有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务。这时候,文件缓存会是一个不错的选择。我们需要文件缓存实现哪些功能:功能实现:get、set、has、increment、decrement、delete、flush能够在较短的时间内返回数据支持key过期 为了避免一个文件内的数据过大,造成读取文件的时候延迟较高,我们采用一个key-value一个文件...转载 2019-01-02 10:37:02 · 1815 阅读 · 1 评论 -
php-fpm的配置和优化
我在前面几篇中,很详细的讲述了php-fpm的各种介绍,和安装。今天来看一下它的配置文件php-fpm的各种配置以及一些常见的优化。php-fpm的安装目录下面是我的平时的环境搭建php的各种安装目录,大家的基本也差不多。centos等linux平台 /usr/local/php/php /usr/local/php/etc/php.ini /usr/local/php...转载 2018-11-05 14:35:25 · 824 阅读 · 0 评论 -
php-fpm的安装和启动
在前面我学习过了php中的mod_php模式和mode_fastcgi和php-fpm模式:地址,中大致的讲述了几种模式的区别,也明白了php-fpm是fastcgi模式的管理器。今天就来看下php如何安装php-fpm,以及运行。安装 php-fpm我的机器是centos 6.2 之前就已经安装过了php 5.4.11,PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了。...转载 2018-11-05 14:34:44 · 6155 阅读 · 0 评论 -
php中fastcgi和php-fpm是什么东西
最近在研究和学习php的性能方面的知识,看到了factcgi以及php-fpm,发现我对他们是少之又少的理解,可以说几乎是一无所知,想想还是蛮可怕的。决定仔细的学习一下关于这方面的知识。参考和学习了以下文章: 1. mod_php和mod_fastcgi和php-fpm的介绍,对比,和性能数据 2. 实战Nginx_取代为了如何一步步的引出fastcgi和php-fpm,我先一点一点的...转载 2018-11-05 14:33:51 · 295 阅读 · 0 评论 -
对比PHP对MySQL的缓冲查询和无缓冲查询
关于缓冲查询和无缓冲查询MySQL的客户端有两种类型的查询:缓冲查询:将接收查询的结果并把他们存储在客户端的缓存中,而且接下来获取行记录的请求仅仅从本地内获取。(1)优点:可以在结果集中自由地移动“当前行”的指针,这样很容易找到,因为结果是存在客户端的。(2)缺点:需要额外的内存来存储这些结果集,而且需要大量的内存,另外,php中用来运行查询的函数会一直到所有的结果都接收才会返回值。无缓...原创 2018-11-05 10:24:46 · 1153 阅读 · 0 评论 -
PHP JWT token加密
前言关于jwt的介绍这里就不阐述了,相信你已经在网上看到了N篇介绍文章(你丫的讲那么多介绍到是告诉我怎么样呀!),关于php使用jwt的相关的使用却少的可怜,有的也看的模模糊糊,于是就自己整理,也方便自己以后进行查看。jwt版本php中jwt有3个版本:2.0、2.2、3.0。so!我们选择的是3.0的版本。别问为什么,你买电子产品都是买新不买旧呢。(说到这,想到了即将到手的iphon...转载 2018-08-29 17:54:16 · 2908 阅读 · 0 评论 -
PHP 垃圾回收与内存管理指引
引用计数在 PHP 5.2 及以前的版本中,PHP 的垃圾回收采用的是 引用计数 算法。引用计数基础知识引用计数基础知识php 的变量存储在「zval」变量容器(数据结构)中,「zval」属性包含如下信息:当前变量的数据类型; 当前变量的值; 用于标识变量是否为引用传递的 is_ref 布尔类型标识; 指向该「zval」变量容器的变量个数的 refcount 标识符(即这...转载 2018-08-09 14:49:59 · 331 阅读 · 0 评论 -
深入剖析 Web 服务器与 PHP 应用之间的通信机制 – 掌握 CGI 和 FastCGI 协议的运行原理
身为一名使用 PHP 语言开发后端服务的程序猿,我们每天都和 PHP 以及 Web 服务器产生无数次的亲密接触。得益于它们,我们才能够如此快速的构建出令人陶醉的 Web 产品。尽管我们已经和 Web 服务器和 PHP 建立起深厚的友谊,但你知道它们之间为何能够配合的如此默契么?这一切都需要从 CGI(Common Gateway Interface:通用网关接口)协议说起。但是请不要对 C...转载 2018-08-09 14:47:13 · 380 阅读 · 0 评论 -
PHP二维数组(或任意维数组)转一维数组
目录1 array_reduce函数法2 array_walk_recursive函数法3 array_map函数法假设有下面一个二维数组:$user = array( '0' => array('id' => 100, 'username' => 'a1'), '1' => array('id' => 101, 'username' => 'a...原创 2018-07-16 11:58:06 · 3179 阅读 · 0 评论 -
ThinkPHP5.0.x框架SQL注入
漏洞简述尽管ThinkPHP 5.0.x框架采用了参数化查询方式,来操作数据库,但是在 insert 和 update 方法中,传入的参数可控,且无严格过滤,最终导致本次SQL注入漏洞发生。ThinkPHP基础知识在进行漏洞分析之前,我们需要了解一下ThinkPHP基础知识,这里仅介绍对本次漏洞分析有帮助的部分。ThinkPHP5.0的 目录结构thinkphp 应用部署目录├─applicati...转载 2018-06-05 13:46:03 · 14204 阅读 · 0 评论 -
mysql分表
概述:当一个表的数据很大,比如200G,这时太大,我们只靠索引也不好使了,这时我们需要分表和分区处理。分表有两种形式(水平分表和垂直分表)。一、水平分表 核心思想:把一个大表,分割N个小表,小表和大表结构一样,只是把数据分散到不同的表中。 1.1 简单例子:比如说是通过ID直接登录(例如QQ号),可以直接使用下面的例子 每次登录验证的时候只要把传过来的id除3取模,根据模可以找到...原创 2018-06-04 12:35:13 · 420 阅读 · 0 评论 -
48 条高效率的 PHP 优化写法
1 字符串1.1 少用正则表达式能用PHP内部字符串操作函数的情况下,尽量用他们,不要用正则表达式, 因为其效率高于正则。没得说,正则最耗性能。str_replace函数要比preg_replace快得多,strtr函数又比str_replace来得快。有没有你漏掉的好用的函数?例如:strpbrk()、strncasecmp()、strpos()、strrpos()、stripos()、strr...转载 2018-06-01 13:53:52 · 344 阅读 · 0 评论 -
centOS 7 安装redis
如果使用yum 安装的redis不会是最新版的redisyum install redis如果要安装最新的redis,则需要安装Remi的软件源,官网地址:http://rpms.famillecollet.com/yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm执行安装:yum --enabler...原创 2018-05-29 10:19:12 · 496 阅读 · 0 评论 -
PHP结合redis实现高并发下的抢购、秒杀功能
抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。重点在于第二个问题常规写法:查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数<...原创 2018-05-28 10:46:35 · 478 阅读 · 0 评论 -
PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
抢购、秒杀是平常很常见的场景,面试的时候面试官也经常会问到,比如问你淘宝中的抢购秒杀是怎么实现的等等。抢购、秒杀实现很简单,但是有些问题需要解决,主要针对两个问题:一、高并发对数据库产生的压力二、竞争状态下如何解决库存的正确减少("超卖"问题)第一个问题,对于PHP来说很简单,用缓存技术就可以缓解数据库压力,比如memcache,redis等缓存技术。第二个问题就比较复杂点:常规写法:查询出对应商...转载 2018-05-21 14:58:43 · 1038 阅读 · 0 评论 -
PHP实现精确统计在线人数功能
HP对session对象的封装的很好,根据HTTP协议,每个范围网站的访客都可以生成一个唯一的标识符12echo session_id();//6ed364143f076d136f404ed93c034201<br />这个就是统计在线人数的关键所在,只有有这个session_id 也就可以区分访问的人了。因为每一个人都不同。接下来,是怎么把session变量里面的值存到数据库里面去,...原创 2018-05-11 21:17:57 · 5826 阅读 · 0 评论 -
详解ThinkPHP5 instance的实现
本文主要介绍了ThinkPHP5 instance 的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。希望对大家有所帮助。最近学习 ThinkPHP5,第一次看到 TestClass::instance() 就能创建 TestClass 实例的方法。感到很好奇,翻阅 ThinkPHP 的源代码,大体理解了 它的 设计思想,非常的先进。老规矩,直接上代码:123456789101112...原创 2018-05-11 11:08:20 · 2549 阅读 · 0 评论 -
PHP合并两张(多张)图片
后台框架为ThinkPHP。需求分析,微信分享时需要设置图片尺寸为:400x400,但是系统抓取过来的图片大小为300x400。一 丶遇到的问题第一反应想到的是采用tp框架自带的Image类来进行实现$image = new \Think\Image(); $image->open('./1.jpg');// 按照原图的比例生成一个最大为150*150的缩略图并保存为thumb.jpg...原创 2018-05-07 17:35:21 · 4102 阅读 · 0 评论 -
自定义PHP常用功能函数(实时补充)
<?php// +----------------------------------------------------------------------// | PHP公共函数库// +----------------------------------------------------------------------// | Date : 2018-05-04// +...原创 2018-05-04 17:59:52 · 557 阅读 · 0 评论 -
php.ini 配置详解
[PHP]engine = On ---> 是否启用PHP解析引擎short_open_tag = Off ---> 是否使用简介标志asp_tags = Off ---> 不允许asp类标志precision = 14 ---> ...原创 2018-05-03 14:48:52 · 781 阅读 · 0 评论 -
Apache 配置详解
1. ServerRoot:服务器的基础目录,一般来说它将包含conf/和logs/子目录,其它配置文件的相对路径即基于此目录。默认为安装目录,不需更改。语法:ServerRoot directory-path如: ServerRoot "/usr/local/apache-2.2.6"注意,此指令中的路径最后不要加 / 。2. Listen:指定服务器监听的IP和端口。默认情况下...原创 2018-05-03 14:47:44 · 868 阅读 · 0 评论 -
TP5单例模式操作Model
一 丶创建数据库和数据库配置 1. 数据库设计如下SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for users-- ----------------------------DROP TABLE IF EXISTS `users`;CREATE TABLE `users` ( ...原创 2018-05-02 18:38:07 · 2967 阅读 · 1 评论 -
Nginx 配置详解
#定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数。worker_processes 8;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]error_log /var/log/nginx/error.log info;#进程文件pid /var/run...原创 2018-05-02 13:56:32 · 271 阅读 · 0 评论 -
Nginx配置文件nginx.conf详解
Nginx 总的 配置文件 位置 /usr/local/nginx/conf/nginx.confnginx 正则匹配一.正则表达式匹配,其中: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中: -f和!-f用来判断是否存在文件 -d和!-d用来判断是否存在目录 -e和!-e用来判断是否存在文件或目录 -x和!-x用来...转载 2018-05-02 13:54:40 · 947 阅读 · 0 评论 -
TP5.0 Redis 单例模式
看到好多面试都问设计模式,我就简单的了解了一下,顺便把之前封装好的Reis做了一次修改.单例模式(SingletonPattern单件模式或单元素模式)单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有以下3个特点:1 . 它必须有一个构造函数,而且构造函数必须为私有2.必须有一个保存实例的静态成员变量3.拥有一个访问这个实例的公共的静态...原创 2018-04-26 17:52:51 · 752 阅读 · 1 评论 -
windows下php7.X安装redis扩展以及redis测试使用全过程(phpstudy,wamp,xampp)
一,php中redis扩展安装配置 1, 首先第一点,也是最重要一点是,你要知道你的php版本信息,这会决定你的扩展文件版本。特别需要记住一点的是,redis选择x64或者x86,是以php版本的Architecture是x64或者x86决定的,跟windows操作系统无关的。本例为phpstudy集成环境,使用phpinfo()函数将php版本信息打印出来的结果如下: 在这里,可以清楚的...原创 2018-04-26 17:18:25 · 821 阅读 · 0 评论 -
10个鲜为人知但非常有用的PHP函数
1.来文史特距离(字符串相似性)<?php$str1 = "aaa";$str2 = "aaab";echo levenshtein($str1, $str2); //输出2?>它可以计算出 字符串str1和字符串str2 之间相差几个字母。这个是php比较特色的函数,因为你用其他语言很可能要自己去实现来文史特距离的矩阵元算。2.返回所定义的所有变量的数组<?phpprint_r...转载 2018-04-17 10:06:07 · 213 阅读 · 0 评论 -
PHP二维数组排序 array_multisort
对2维数组或者多维数组排序是常见的问题,在PHP中我们有个专门的多维数组排序函数,下面简单介绍下:array_multisort(array1,sorting order, sorting type,array2,array3..) 是对多个数组或多维数组进行排序的函数。array1必需。规定输入的数组。sorting order可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DE...转载 2018-04-16 15:17:23 · 234 阅读 · 0 评论 -
如何定义一个 PHP 函数
<?phpfunction divide($dividend, $divisor){ return $dividend / $divisor;}echo ;echo divide('sa', 'sd');这段代码乍一看没毛病,但是如果你向它传递「任意」参数,它就会出问题。写出好的代码是一个学无止境的过程。让我们来改...转载 2018-04-16 11:15:59 · 1307 阅读 · 0 评论 -
PHP二维数组切割为字符串并去除重复的值
应用场景在于需要查询出某一个rent_contract_id所有有关的id及rent_contract_parent_id,然后组装成字符串便于后期使用FIND_IN_SET进行查询操作:// select rent_contract_id,rent_contract_parent_id from tb_rent_contract where rent_contract_id =797 or re...原创 2018-04-12 10:47:22 · 541 阅读 · 0 评论 -
PHP日期的常见应用
date_default_timezone_set('PRC');//时区,在独立的PHP文件里面需要特别注意要设置时区,PRC为中国,东八区 echo date('m',strtotime(date('Y-m-d'))); //当前时间所在月份 echo date('Y',strtotime(date('Y-m-d'))); //当前时间所在年 echo date('Y-m-d', s...原创 2018-04-10 16:06:34 · 273 阅读 · 0 评论 -
详解ini_set()
印象中在脚本中修改配置,顺手拈来: @代码一ini_set('memory_limit','1024M'); 还记得最好放在文件最前面,于是, @代码二echo ini_get('memory_limit'); ini_set('memory_limit','1024M'); echo ini_get('memory_limit'); exit; 结果都是128M;难道没有权限?难道...转载 2018-04-08 13:52:37 · 5954 阅读 · 0 评论 -
thinkPHPsession跨域问题
ThinkPHP的session跨域问题很多开发者都遇到过!其实不管是ThinkPHP还是php本身,在解决session跨域问题的时候都需要设置session.cookie_domain。在ThinkPHP里,需要修改配置文件conf/config.php在第一行加上: ini_set('session.cookie_domain', ".domain.com");//跨域访问Sessi...转载 2018-04-08 12:03:39 · 535 阅读 · 0 评论 -
免费生成二维码API,支持#
分享几个在线生成网址二维码的API接口。都是采用http协议接口在线生成网址二维码的API接口: http://pan.baidu.com/share/qrcode?w=150&h=150&url=你的网址 http://b.bshare.cn/barCode?site=weixin&url=你的网址 http://s.jiathis.com/qrcode.p...原创 2018-04-08 11:54:49 · 2891 阅读 · 0 评论 -
linux下使用Crontab实现PHP脚本定时任务
1、准备工作,创建1个数据表"company_test",字段包括员工姓名,部门,联系电话,主管DROP TABLE IF EXISTS `company`;CREATE TABLE `company_test` ( `id` int(255) NOT NULL AUTO_INCREMENT, `ename` varchar(100) DEFAULT NULL, `departmen...原创 2018-04-03 10:06:02 · 339 阅读 · 0 评论 -
ThinkPHP导入Excel文件到数据库的简单实现
第一步:在官网下载PHPExcel插件下载传送门,放在ThinkPHP/Library/Vendor目录下第二步:前端简单代码<!DOCTYPE html><html><head> <title>PHPexcel</title></head><body> <form action=&q原创 2018-04-02 13:54:06 · 3737 阅读 · 1 评论