PHP
文章平均质量分 53
qq_19557947
这个作者很懒,什么都没留下…
展开
-
PHP-FPM知识点
listen.backlog = 65535 #未accept处理的socket队列大小,-1 on FreeBSD and OpenBSD,其他平台默认65535,高并发时重要,合理设置会及时处理排队的请求;太大会积压太多,处理完后nginx在前面都等超时断开这个和fpm的socket连接了,就杯具了。不要用-1,建议1024以上,最好是2的幂值。#一个池共用一个backlog队列,所有的池进程都去这个队列里accept连接。#最大数量受限于系统配置 cat /proc/sys/net/cor.原创 2021-04-29 11:40:12 · 233 阅读 · 0 评论 -
php-fpm进程数配置
php-fpm.conf进程数配置优化pm:pm表示使用哪种方式,有两个值可以选择,static(静态)或dynamic(动态)pm为static时以下参数生效pm.max_children:表示开启php-fpm进程数量pm为dynamic时以下参数生效pm.start_servers:动态方式下的其实php-fpm进程数量pm.min_spare_servers:动态方式下的最小php-fpm进程数量pm.max_spare_servers:动态方式下的最大php-fpm进程原创 2021-04-29 11:14:38 · 628 阅读 · 0 评论 -
阶梯计费
// 构建规则,这里可以使用两个数组 key为价格 值为区间$rules = [ 330=>[0,100], 300=>[100,300], 280=>[300,500], 220=>[500,1024], 150=>[1024,3*1024], 36=>[100*1024, PHP_INT_MAX],]; function calc($used, $rules){ $sum = 0; .原创 2021-04-29 00:27:44 · 461 阅读 · 0 评论 -
两个数组求交集
//求两个数组的交集$a1 = [1,22,33];$a2 = [22,33,78];//有序数组双指针法,这个需要将数组先转成有序数组function doubleKeyIntersect($arr1,$arr2){ sort($arr1); sort($arr2); //计算两个数组的长度 $len1 = count($arr1); $len2 = count($arr2); //初始指针 $k1 = 0; $k2 = 0;.原创 2021-04-29 00:10:30 · 139 阅读 · 0 评论 -
PHP的底层执行原理和周期
php的执行周期,从最初湖编写的PHP脚本---->到最后脚本被执行---->得到执行结果。可以分为如下几个阶段。首先,Zend Engine(ZE),调用词法分析器(Lex生成的,源文件在zend/zend_language_sanner.l),将我们要执行的PHP源文件,去掉空格,注释,分割成一个token。然后,ZE将得到的token退给语法分析器(yaccs生成,源文件在Zend/zend_language_parse.y),生成一个个的opcode,opcode一般会以op a原创 2021-04-25 17:47:10 · 84 阅读 · 0 评论 -
PHP-FPM
PHP-FPM(PHP FastCGI Process Manager)PHP FastCGI进程管理器,用于管理PHP进程池的软件,用于接收web服务器的请求PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程,可以平滑重载PHP配置1,什么是是php-fpmfpm的出现完全是因为php-fastcgi的出现,为了更好的管理php-fastcgi而实现的一个程序2,什么是php-fastcgiphp-fastcgi只是一个cgi程序,只会解析php请求,并返回结果,不会原创 2021-04-25 17:35:53 · 99 阅读 · 0 评论 -
vscode调试PHP(WEB+CLI调试)
docker搭建开发环境1,vscode安装PHP Debug扩展2,php容器安装xdebugpecl install xdebug && docker-php-ext-enable xdebug3,本机配置docker-php-ext-xdebug.ini#extension的路径根据上一步安装的xdebug提示填写zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xde原创 2020-08-04 17:51:51 · 509 阅读 · 0 评论 -
RabbitMQ基础概念及PHP-RabbitMQ的使用方法
RabbitMQ基础概念AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件。消息中间件主要用于组件之间的解耦和通讯。AMQP的主要特征是面向消息,队列,路由(包括点对点和发布/订阅),可靠性,安全。RabbitMQ是一个开源的AMQP实现,服务器端使用Erlang语言编写。用于在分布式系统中...原创 2019-11-21 19:47:18 · 242 阅读 · 0 评论 -
PHP socket构造类似QQ通信
socket通信过程原理图PHP socket构造类似QQ通信服务端set_time_limit(0);$ip = '127.0.0.1';$port = 8091;/** +------------------------ * socket服务端通行过程 +------------------------ * @socket_create 创建socket资源...原创 2018-07-31 17:34:30 · 262 阅读 · 0 评论 -
array_merge与array + array的区别
#array_merge$a=['m'=>1,'n'=>2,2=>0,7=>11];$b=['k'=>1,'m'=>99,7=>8];print_r(array_merge($a,$b));#结果[ "m" => 99,//$b['m']会取代$a['m']的值且$b['m']不会保留,相当于unset($b['m']) "n...原创 2018-08-23 16:40:17 · 633 阅读 · 0 评论 -
LeetCode 接雨水PHP实现
给定一个数组a,数组的每个成员代表x轴上每个区域宽度为1的一个台阶高度,计算下雨时,这个台阶最多能够积多少(面积)雨水?public function water($heights){ $hc = count($heights); if( $hc<= 2) { return 0; } //获取最高点 $heightM...原创 2019-04-24 18:57:25 · 201 阅读 · 0 评论 -
程序员调BUG写照
原创 2018-07-20 14:03:43 · 520 阅读 · 0 评论 -
static的用法
class School{ static public $name = '中学'; public $address = '北京'; public $studentNum; public function __construct(){ $this->studentNum = 1000; echo __LINE__; ...原创 2018-07-19 14:27:31 · 112 阅读 · 0 评论 -
多版本PHP部署及composer配置
mac#安装php5.6brew install php56#安装php7.1brew install php71#安装composerbrew install composer此时composer对应的php版本是5.6现在我们有一个项目A是php5.6的,有一个项目B是php7.1的访问项目A要求用的是php5.6版本,访问项目B时要求用的是php7.1#方案一#查看当前php版本...原创 2018-06-22 13:54:17 · 4520 阅读 · 0 评论 -
Laravel SQL用指定的字段作为查询结果的key
$roles = Role::all()->keyBy('name')->toArray();//如果不是使用Eloquent$roles = collect(DB::table('role')->get())->keyBy('name')->toArray();原创 2018-06-06 16:51:09 · 8637 阅读 · 0 评论 -
Laravel SQL查询中first, pluck与lists方法
由运行结果截图我们不能得出这3个方法的区别。first 方法是取得结果集数组中第一列数据,如果结果集为空则返回 null 。pluck 方法是取得结果集第一列特定字段,它返回是字符串;lists 方法是按照 key=>value 对的方式返回数组;它的参数最多两个,第一个参数作为键值(value),第二个参数作为键名(key)。...原创 2018-06-06 16:33:19 · 2558 阅读 · 0 评论 -
laravel-excel设置单元格格式及ignoreEmpty的用法
laravel导入导出excel的插件:mattwebsite/excel安装:composer require mattwebsite/excel文档:https://laravel-excel.maatwebsite.nl/3.1/getting-started/installation.html 注意:3.0没有导入模块只有导出功能/** *注意:设置单元格格式为数...原创 2018-10-05 18:06:14 · 4971 阅读 · 0 评论 -
laravel的event和queue
使用场景event:解耦代码queue:异步执行event在app/Providers/EventServiceProvider.php里面注册事件监听器,其中listen属性包含了事件(键)和对应监听器(值)数组,如果应用需要,可以添加多个时间到该数组//注册AppleMac事件和DoSomething1和DoSomething2监听器protected $listen ...原创 2018-10-16 15:24:35 · 682 阅读 · 0 评论 -
XSS攻击和防范
XSS又叫CSS(Cross Site Script),跨站脚本攻击。它指的是恶意攻击者往web页面里插入恶意html代码,当用户浏览该页面时,嵌入其中web里面的html代码会被执行,进而达到攻击的目的PHP防范:1,PHP直接输出html的,可以采用以下方法过滤:htmlspecialchars函数,该函数会将预定义的字符""和"&"转换成HTML实体,实体转载 2017-09-04 17:58:38 · 380 阅读 · 0 评论 -
常驻命令队列mysql连接超时的处理办法
1,常驻命令队列长时间没访问再次有消息消费时,会报错PDO::prepare(): send of 131 bytes failed with errno=32 Broken pipe这是因为mysql服务端自动断开socket,mysql的socket timeout超过8小时(默认)会自动断开已建立的tcp连接但由于是常驻命令,程序认为connection连接还存在,进行mysql...原创 2019-09-21 16:44:50 · 1189 阅读 · 0 评论 -
php-rabbitmq结合rabbitmq_delayed_message_exchange实现延时队列
1#查看插件列表rabbitmq-plugins list#如果未安装,则下载wget https://dl.bintray.com/rabbitmq/community-plugins/3.7.x/rabbitmq_delayed_message_exchange/rabbitmq_delayed_message_exchange-20171201-3.7.x.zip#解压unz...原创 2019-09-19 19:22:26 · 622 阅读 · 0 评论 -
phpstorm配置docker+Xdebug调试命令行(CLI)
命令行(CLI)调试1,配置CLI Interpreter,点击CLI Interpreter后面的...Server点击New,选择Docker for mac(本机是mac)Path mappings选择docker中代码的地址和本机代码的地址Image选择本机已经下载好的php的docker镜像点击ok点击红框标注的文件夹,配置容器的网络和文件夹...原创 2019-08-01 19:34:57 · 2017 阅读 · 0 评论 -
phpstorm配置docker+Xdebug调试接口
一、接口调试1,配置dicker里面的php.ini,有可能docker里的针对xdebug的单独ini,例如/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini#生产环境严禁使用xdebugxdebug.remote_enable=1#如果环境是mac+docker,那宿主机IP可以使用docker.for.mac.localhos...原创 2019-08-01 18:49:57 · 838 阅读 · 0 评论 -
php-fpm加入mac启动项,plist文件
1,通过brew安装phpbrew install php2,修改php-fpm端口及允许php-fpm后台运行brew安装的php的php-fpm配置文件位于/usr/local/etc/php中由于mac自带的php是7.1的php-fpm占用了9000端口故修改为9003php-fpm允许后台执行修改daemonize = yes3,php-fpm加入mac启动...原创 2019-05-27 15:45:24 · 501 阅读 · 0 评论 -
给定一个正序的整形数组A和一个数X,判断数组A里面是否存在两个数,他们的和为X;
function judge($a,$x){ $ca = count($a); $xa = []; for($i = 0,$j = $ca -1;$i<$j;) { $s = $a[$i] + $a[$j]; if($s == $x) { $xa[] = [$a[$i],$a[$j]]; ...原创 2019-04-24 18:59:57 · 304 阅读 · 0 评论 -
redis常见问题
什么是redis?redis是一个基于内存的高性能key-value数据库,全称Remote Dictionary Server。redis和memcached的区别?1)持久化memcached把数据全部存在内存中,断电后会挂掉,数据不能超过内存大小redis支持持久化,持久化的数据存在硬盘上2)支持的数据类型memchached支持的数据类型相对简单,redis支持...原创 2019-03-29 10:11:07 · 112 阅读 · 0 评论 -
usort与array_multisort
//usort 使用用户自定义的比较函数对数组中的值进行排序$uData = [ ['name'=>'Tom','age'=>11,'score'=>72,'class'=>'三班'], ['name'=>'Tim','age'=>12,'score'=>75,'class'=>'四班'], ['name'=>'Ali...原创 2018-05-17 15:07:21 · 189 阅读 · 0 评论 -
PHP递归
递归递归是一种函数调用自身的机制。递归必须要有边界条件,也就是递归出口(退出递归)递归前进段和递归返回段,也就是最后得到的值当边界条件不满足时,递归前进;当边界条件(递归出口)满足时,递归返回。例1:斐波那契数列1,1,2,3,5,8,13,21......例2:目录的递归遍历例3:无限分类例4:约瑟夫环例5:二分查找和合并排序例6:猴子吃桃:每天吃原创 2017-09-12 10:48:18 · 2250 阅读 · 0 评论 -
PHP中的private、protected、public
各修饰符调用权限 privateprotectedpublic本类YYY子类NYY外部NNY例:class Human{ private $name = 'Tom'; protected $money = 3000; public $a转载 2017-09-06 14:12:09 · 306 阅读 · 0 评论 -
PHP的单例模式
单例模式:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式是一种常见的设计模式,在计算机系统中,线程池,缓存,日志对象,对话框,打印机,数据库操作,显卡的驱动常被设计成单例单例模式分3种:懒汉式单例,饿汉式单例,登记式单例。特点:1.只能有一个实例2.必须自行创建这个实例3,必须给其他对象提供这一实例场景:PHP一转载 2017-09-06 12:03:04 · 178 阅读 · 0 评论 -
PHP的简单工厂模式
简单工厂:简单工厂模式是有一个工厂对象决定创建出哪一种产品类的实例。优点:模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个实例,而调用者则可以免去直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的类的时候无需修改调用者。缺点:这个工厂类集中了所有的创建逻辑,当有负责的多层次等级结构时,所有的业务逻辑都在这原创 2017-09-06 09:56:38 · 203 阅读 · 0 评论 -
PHP中static的用法
在变量前面加上static就构成了静态变量在全局变量前面加上static就构成了全局静态变量static变量和普通变量的区别:1,非静态全局变量作用域是这个源程序,当一个源程序有多个源文件组成时,非静态的全局变量在各种源文件都是有效的。2,静态全局变量限制了其作用域,即只在定义该变量的源文件内有效3,static局部变量只会被初始化一次,下一次依据上一次结果值4,stati原创 2017-09-05 18:59:54 · 244 阅读 · 0 评论 -
PHP中global的用法
PHP作用域:全局环境和局部环境彼此独立隔离,互相不能访问各自里面的变量。这里我们首先要明白一个知识点:global $a是外部$a的同名引用从下面这个例子我们可以看出:$GLOBALS['a']是外部的全局变量$a本身$a = 1;function test(){ unset($GLOBALS['a']);}test();echo $a;什么都没输出,原创 2017-09-05 18:33:07 · 3528 阅读 · 0 评论 -
1024!结尾有多少个0
1024!结尾有多少个0?如题,我们只需考虑1024有多个5的倍数,1024/5=204;同时还要注意到1024有多少个25的倍数,1024/25=40;同理,1024/125=8;1025/625=1;故1024!结尾有204+40+8+1=253原创 2017-09-05 09:21:32 · 373 阅读 · 0 评论 -
CSRF攻击和防范
csrf(Cross Site Request Forgery)跨站请求伪造csrf攻击能够实现依赖于这样一个简单的事实:用户在浏览器打开多个浏览器页签,假如用户登录一个站点A,站点A通过cookie来跟踪用户的回话,假如站点A的一个页面siteA-page.php被站点B知道了,而这个页面的地址以某种方式潜入到了B站点的一个页面siteB-page.php中,如果这是用户在保持A转载 2017-09-04 18:34:25 · 192 阅读 · 0 评论 -
wamp结合phpstorm配置xdebug断点调试
1,查看phpinfo(),在xdebug扩展下我们可以看到IDE Key2,进入http://www.jetbrains.com/phpstorm/marklets/3,将第一步的IDE Key复制粘贴到第二部页面中IDE Key的输入框中4,点击GENERATE生成debug文件,将生成的debug文件拖动到书签栏中,(提前将chrome的书签栏设为可显示)5,修改php.原创 2017-08-09 18:35:02 · 589 阅读 · 0 评论 -
访问记录分析
1,类似百度统计,一个js在页面新增一个src,src请求,将相关参数记录在服务端原创 2017-07-10 12:25:48 · 726 阅读 · 0 评论 -
CentOS6.6下源码安装apache2.4.20+PHP5.6.20
准备CentOS6.6 Linux机器一台 root权限或者sudoApache官网下载:http://httpd.apache.org/download.cgi由于Apache依赖于APR、APR-Util和PCRE,所以需要下载:APR + APR-Util:http://apr.apache.org/download.cgi获取httpd-2.4.20.tar.g原创 2016-07-26 15:31:34 · 561 阅读 · 0 评论 -
laravel 报htmlentities() expects parameter 1 to be string,array given
遇到此类问题是由于在blade中使用了双括号输出数组例如:后台给前端的参数是$file = array('a'=>1,'b'=>2);前端在模板中使用{{$file}}此种情况会报此类错误如要输出,使用foreach输出数组@foreach($file as $val){{$val}}@endforeach另一种是由于blade模板中使用双括号惊醒变量赋值数原创 2017-03-29 20:31:50 · 23795 阅读 · 2 评论 -
laravel初级
1,laravel一键安装地址http://www.golaravel.com/download/2,composer下载地址https://getcomposer.org/download/下载Composer-Setup.exe3,执行Composer-Setup.exe,安装在与php.exe同级目录中4,打开cmd,执行php -v和composer -v,正常输出则compo原创 2016-10-25 10:38:42 · 221 阅读 · 0 评论