PHP
文章平均质量分 73
私念
PHP GOLANG
展开
-
深入理解GC原理
垃圾定位算法(1)引用计数法 (Reference Counting)。 如 python php 通常C++通过指针引用计数来回收对象,但是这不能处理循环引用,原理是在每个对象内部维护一个引用计数,当对象被引用时引用计数加一,当对象不被引用时引用计数减一。当引用计数为 0 时,自动销毁对象。 例如:谁想用驴干活的时候,就在驴身上画个圈圈,用一次画一个,用完了把代表本次使用的圈圈擦掉。当这头驴身上没圈圈的时候,就可以卸磨杀驴了,身上有圈圈的驴不能杀。 这...原创 2022-03-11 15:29:55 · 584 阅读 · 0 评论 -
php中cookie的值包含加号(+)获取变成空格的问题分析
背景最近发现有部分用户反馈,获取不到登录信息,于是进行分析分析我们的登录信息是加密存储到cookie中的,查看了下这个用户的 cookie加密信息中包含 加号“+” ,但是 php $_COOKIE 获取的时候,变成了空格,于是解密失败分析请求头中的信息发现,请求传过来的值是有 “+” 的,但是 :比如cookie中存储的 “cWEolyrQ0l63FG+YWHA” ,$_COOKIE 获取出来显示的 “cWEolyrQ0l63FG YWHA” ,多...原创 2022-02-11 11:56:29 · 1805 阅读 · 0 评论 -
php中foreach引用问题
背景php中foreach引用使用不当,经常引起莫名其妙的问题,建议使用完unset掉,或者尽量少用例如<?php$arr=[1,2,3];foreach($arras&$value){}foreach($arras$value){print_r($arr);}Array([0]=>1[1]=>2[2]=>1)Array([0]=>1...原创 2022-01-24 14:04:20 · 532 阅读 · 0 评论 -
TCP全链接队列满的问题分析之net.core.somaxconn详解
背景参考:TCP全链接队列满的问题分析之net.core.somaxconn详解_运维_PHP面试网最近控制台查看腾讯云服务器状态时,发现一个异常情况提示如下:该实例最近12小时内在2022-01-18 14:48出现过TCP全链接队列满的情况,为避免成为业务瓶颈,建议您检查业务健康情况。可参考文档:点击查看TCP 全连接队列满TCP 全连接队列的长度取net.core.somaxconn及业务进程调用 listen 时传入的 backlog 参数,两者中的较小值。若您的实..原创 2022-01-18 17:49:44 · 5499 阅读 · 0 评论 -
composer安装和常见问题
参考:composer安装和常见问题_php_PHP面试网下载 Composer安装前请务必确保已经正确安装了PHP。打开命令行窗口并执行php -v查看是否正确输出版本号。安装Composerphp-r"copy('https://install.phpcomposer.com/installer','composer-setup.php');"phpcomposer-setup.phpphp-r"unlink('composer-setup.php');"...原创 2022-01-15 09:45:00 · 449 阅读 · 1 评论 -
谷歌浏览器Chrome 80版本默认SameSite导致跨域请求Cookie丢失
参考:谷歌浏览器Chrome 80版本默认SameSite导致跨域请求Cookie丢失_php_PHP面试网最近要实现一个简单的单点登录,并且将相关信息保存在Cookie中。 后来发现在Chrome浏览器中不能跨域设置cookie,其他浏览器如IE,firefox访问正常。最后一番排查,发现是Chrome浏览器升级到80版本后才有这个问题,在80前的版本中访问正常。原来,在Chrome 80版本中,Chrome会将没有声明SameSite值的cookie默认设置为SameSite=...原创 2022-01-14 15:00:00 · 1797 阅读 · 0 评论 -
PHP中str_replace和preg_replace
参考:https://phpmianshi.com/?id=317里字符串替换的函数,有str_replace()、str_ireplace()、substr_replace()、preg_replace()、strtr()等几个,程序员在写程序的时候,往往会根据自己的习惯以及实际情况选用其中一个或多个。这几个函数虽然都有字符串替换的功能,但它们无论从语法到作用,还是速度和效率上都有所不同,所以并非在任何场合都可以使用它们。preg_replace函数解释mixedpreg_replace..原创 2022-01-13 17:19:27 · 690 阅读 · 0 评论 -
php爬虫框架简介
参考:php爬虫框架简介_php_PHP面试网简介php爬虫框架有:1、phpspider,一个爬虫开发框架;2、Beanbun,用PHP编写的多进程网络爬虫框架;3、PHPCrawl,一个PHP开源的Web检索蜘蛛类库。PHP主流爬虫框架phpspider地址:GitHub - owner888/phpspider: 《我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》所使用的程序phpspider是一个爬虫开发框架。使用本框架,你不用了解原创 2022-01-10 09:00:00 · 1542 阅读 · 0 评论 -
git中sh文件添加可执行权限
参考:git中sh文件添加可执行权限背景有时我们需要在git仓库中放一些可执行脚本,但是部署到线上后却没有可执行权限,还要单独加权限,过程比较繁琐,下面介绍下如果修改git仓库中文件的权限1.查看文件权限信息$gitls-files--stage100644b0a1909819160a88cf723cba9b082a41638e19d70work.sh发现644(r=4,w=2,x=1),需要将其修改为可执行权限755git-ls-files - ...原创 2021-11-09 09:22:34 · 1190 阅读 · 0 评论 -
php中如何实现SSO单点登录
北京新增1例甘肃来京确诊病例今天(19日),北京丰台区新增 1 名甘肃来京确诊病例,为银川市确诊病例艾某某的密切接触者。刚刚,北京市召开疫情防控新闻发布会,介绍疫情防控最新情况。病例详情:确诊病例户籍甘肃省武威市,现住北京市丰台区恒富中街。 该病例长期在甘肃省武威市居住,10月15日乘坐K42次列车来京途中,与宁夏回族自治区银川市新冠肺炎确诊病例艾某某同一车厢相邻卧铺。 10月17日自觉咽部不适、咳嗽。 10月18日看到确诊病例艾某某新闻后,主动向辖区疾控中心报告,原创 2021-10-20 20:53:47 · 508 阅读 · 0 评论 -
记一次laravel项目因opcache导致的include过慢问题
参考:记一次laravel项目因opcache导致的include过慢问题 - PHP面试网问题表现 php-fpm-slow.log 大量如下日志:script_filename=/data/nginx/webroot/app-20200611-160330-feb90625/public/index.php[0x00007fc41e61da20]Composer\Autoload\includeFile()/data/nginx/webroot/app-20200611-1603...原创 2021-09-13 19:44:29 · 360 阅读 · 0 评论 -
记一次laravel项目因session导致cpu过高的问题
问题起因:腾讯云监控CPU过高报警 10:20-10:28左右持续 百分之80以上。问题排查:1.查看php-fpm慢日志发现有大量如下日志:[26-May-202010:20:36][poolwww]pid7368script_filename=/data/nginx/webroot/simulation-strategy-20200519-203518-1fe2f14c/public/index.php...省略...[0x00007ffd04d...原创 2021-09-08 21:51:02 · 1229 阅读 · 0 评论 -
php中preg_match_all只能匹配100000字节的限制
参考:https://www.phpmianshi.com/?id=252背景用preg_match_all匹配时,偶尔会匹配失败,只能匹配到一部分符合的数据,代码如下://获取html文本中的a标签,然后获取标签<>之间的内容functionget_tag_from_html($content){$pattern="/(<a(.*)>(.*)<\/a>)|(<.*?>)/";preg_match_all($pa...原创 2021-03-11 20:51:33 · 264 阅读 · 1 评论 -
php中autoload机制详解
参考:https://www.phpmianshi.com/?id=237背景PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义在同一个类文件中——相信这个文件一定会非常大。但是__autoload()方法出来了,以后就不必为此大伤脑筋了,这个类会在你实例化对象之前自动加载指定的文件。autoload 机制概述在使用PHP的OO模式开发系统时,通常.原创 2021-02-10 11:48:17 · 307 阅读 · 0 评论 -
php中的system方法偶尔会出现unable to fork
参考:https://www.phpmianshi.com/?id=231背景php代码中调用了system方法,执行了shell脚本,一开始运行正常,过一段时间偶尔会出现unable to fork的报错问题原因system调用会fork新的进程,因为每个用户有最大进程数限制,简单的说就是达到用户的进程上限了如何限制linux用户的进程数这个可以通过修改如下文件来设定:vi/etc/security/limits.confvpseehard...原创 2021-01-29 19:28:38 · 1221 阅读 · 0 评论 -
jmeter压测实战
参考:https://www.phpmianshi.com/?id=230下载安装下载JDK : https://download.oracle.com/otn-pub/java/jdk/15.0.2+7/0d1cfde4252546c6931946de8db48ee2/jdk-15.0.2_windows-x64_bin.exe?AuthParam=1611197417_61c2592982272667dcf142a95ef6d58a或者 Sun公司的官网[https://www.or..原创 2021-01-27 19:13:30 · 340 阅读 · 0 评论 -
lumen中出现Syntax error or access violation: 1055 ‘***‘ isn‘t in GROUP BY
参考:https://www.phpmianshi.com/?id=225背景laravel 5.3 以后默认开启 mysql严格模式(strict)在mysql在严格模式下, 并且开启了ONLY_FULL_GROUP_BY的情况下,group by 的字段没有出现在 select 的语句中会报错.关闭了严格模式就不会报错.示例publicstaticfunctionorders($phase){returnself::select(DB::raw("SUM(...原创 2021-01-27 19:09:22 · 170 阅读 · 0 评论 -
lumen项目集成laravelS后sentry无法上报的问题
参考:https://www.phpmianshi.com/?id=207背景公司项目严重依赖lumen系列,代码众多,重构困难,虽然访问量变大,性能问题越来越严重,急需要提升性能,于是找到了这个项目laravelS github : https://github.com/hhxsv5/laravel-s如何接入参考:https://www.phpmianshi.com/?id=195问题描述lumen项目集成laravelS后sentry无法正常上报...原创 2021-01-23 19:11:07 · 223 阅读 · 0 评论 -
composer安装提示killed解决办法
问题描述composer 安装或者更新时报错killed ,因为当前内存不足。composerrequire"hhxsv5/laravel-s:3.7.8"-vvv...Killed问题原因这种情况一般是因为内存不足造成的解决方案1. 增大服务器内存2. 设置swap交换分区free -mmkdir -p /var/_swap_cd /var/_swap_#创建swap文件dd if=/dev/zero of=swapfi...原创 2021-01-22 21:48:32 · 902 阅读 · 0 评论 -
composer autoload自动加载性能优化指南
参考:https://www.phpmianshi.com/?id=204简介composer 提供的 autoload 机制使得我们组织代码和引入新类库非常方便,但是也使项目的性能下降了不少 。composer autoload 慢的主要原因在于来自对 PSR-0 和 PSR-4 的支持,加载器得到一个类名时需要到文件系统里查找对应的类文件位置,这导致了很大的性能损耗,当然这在我们开发时还是有用的,这样我们添加的新的类文件就能即时生效。 但是在生产模式下,我们想要最快的找到这些类文件,并加载他转载 2021-01-20 20:36:55 · 252 阅读 · 0 评论 -
phpstorm2020.3.1最新使用方法
参考:https://www.phpmianshi.com/?id=226phpstorm又更新了,截至目前为止,官网的最新版本为phpstorm2020.3.1,这次phpstorm的更新UI界面就有了很大的变化,主要是添加了对PHP8的支持,具体的可以去官网去了解哈。同样的,随着phpstorm的更新,以往的破解补丁也可能会失效。所以最新的补丁也随之而来啦。2021最新的phpstorm2020.3版本依旧可以使用此补丁破解到2099年一、下载2021年phpstorm最新破解补..翻译 2024-05-09 11:56:00 · 366 阅读 · 0 评论 -
php8世界上最好的语言新版本特性
参考:https://www.phpmianshi.com/?id=203本文只会讲述新特性的一些关键点,更详细的介绍请认真阅读官方文档。01 Union Types(联合类型)说明一点,从 PHP 7 开始,支持下面这样的语法:functionsum(int$a,int$b):int{return$a+$b;}是不是越来越强类型的感觉?虽然如此,但在非严格类型模式下(strict_types=0,这是默认值),你依然可以这么调用:s...原创 2020-12-18 09:20:54 · 784 阅读 · 1 评论 -
php中如何优雅的写复杂if-else
参考:https://www.phpmianshi.com/?id=197提前return优化逻辑结构,让正常流程走主干,非正常流程提前return,去除不必要的else优化前$a=1;$b=2;$c=3;if($a==1){if($b==2){if($c==3){returntrue;}}}returnfalse;优化后$a=1;$b=...原创 2020-12-15 09:38:08 · 513 阅读 · 0 评论 -
php中使用swoole加速lumen项目-laravelS实战
参考:https://www.phpmianshi.com/?id=195背景公司项目严重依赖lumen系列,代码众多,重构困难,虽然访问量变大,性能问题越来越严重,急需要提升性能,于是找到了这个项目https://github.com/hhxsv5/laravel-s下面我们来实战一下环境介绍php7.2centos7swoole4.5.7lumen5.81.安装源码安装wgethttps://github.com/...原创 2020-12-14 19:31:37 · 842 阅读 · 0 评论 -
基于rebase的Git工作流
参考:https://www.phpmianshi.com/?id=124使用Git在多人协作的过程中,我们也会面临如何运用好Git的问题。这种情况下,就出现了各种各样的Git Workflow,而本文将介绍一种基于rebase的工作流,这种工作流也是目前开源社区所比较推崇的做法,了解了这种工作流之后可以更规范的使用Git一、Rebase和Squash1、Rebase是什么,为什么使用Rebaserebase是能够将我们对代码的更改从一个分支集成到另一个分支中的git命令之一(另一个命令是M原创 2020-12-11 10:12:25 · 930 阅读 · 0 评论 -
Fiddler抓包设置及常见问题
参考:https://www.phpmianshi.com/?id=194Fiddler简介官网:https://www.telerik.com/fiddlerFiddler是比较好用的web代理调试工具之一,它能记录并检查所有客户端与服务端的HTTP/HTTPS请求,能够设置断点,篡改及伪造Request/Response的数据,修改hosts,限制网速,http请求性能统计,简单并发,接口测试,辅助自动化测试,Fiddler抓取HTTPS请求配置由于fiddler安装后默认只能.原创 2020-12-10 18:30:13 · 1097 阅读 · 0 评论 -
php中容易出错的小案例
参考:https://www.phpmianshi.com/?id=193sprintf用到sprintf 的时候 如果有传递的变量 如果变量可能出现 % ,则容易出错<?php$content="%')('%s'";$kind=11;$content=sprintf($content,$kind);var_dump($content);//输出PHPWarning:sprintf():Toofewargumentsin/home...原创 2020-12-09 19:34:21 · 151 阅读 · 0 评论 -
从0到1搭建基于swoole的websocket服务
参考:https://www.phpmianshi.com/?id=191源码安装wgethttps://github.com/swoole/swoole-src/archive/v4.5.7.tar.gztar-xzvfv4.5.7.tar.gzcdswoole-src-4.5.7&&\phpize&&\./configure&&\make&&sudomakeinstall启动扩展...原创 2020-12-08 21:21:40 · 287 阅读 · 0 评论 -
php中global与$GLOBAL由引用产生的区别
参考:https://www.phpmianshi.com/?id=192很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身。 global $var 是外部$var的同名引用或者指针。(错误:是个别名引用而已,非指针!!!) 举例说明一下:<?php$var1=1;$var2=2;functiontest(){$GLOBALS['var...原创 2020-11-27 13:42:28 · 110 阅读 · 0 评论 -
从0到1搭建TP5.1+Swoole3.5.15环境
安装首先按照Swoole官网说明安装swoole扩展,推荐新手可以直接使用peclinstallswoole#会安装最新的稳定版(截至本文发布最新版本是4.0.3版本)或者源码安装:git clone https://github.com/swoole/swoole-src.git && \cd swoole-src && \phpize && \./configure &&am...原创 2020-11-16 10:29:59 · 155 阅读 · 0 评论 -
最近网上在讨论一段非常简短的代码,其方法让人落泪
最近网上在讨论一段非常简短的代码,不需要太多 JavaScript 背景也能看懂,但其方法让人落泪。网友点评:网友 @sim642我很欣赏 "true" === "true" 那一行。网友 @hearwa我很认可他注释提到的 Todo 任务,JavaScript 应当存成另外一个文件。网友 @goomymanTODO 是不是作用主要堵住后面人吐槽,“你不说我也知道现在做法不规范”你还见过哪些奇葩的代码?欢迎评论爆料...转载 2020-08-07 16:44:17 · 163 阅读 · 0 评论 -
Laravel中用到的设计模式
参考:https://www.phpmianshi.com/?id=891:工厂模式Auth::user()此处Auth这个类就是工厂中的方法,Auth是注册树中的别名。好处:类似于函数的封装,使对象有一个统一的生成(实例化)入口。当我们对象所对应的类的类名发生变化的时候,我们只需要改一下工厂类类里面的实例化方法即可。2:单例模式好处:对象不可外部实例化并且只能实例化一次,节省资源。实现方式:privatestatic$ins=null;...原创 2020-08-03 20:32:24 · 779 阅读 · 0 评论 -
Laravel神奇的IoC容器
Laravel 的核心就是一个IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是IoC(控制反转)和DI(依赖注入)超人和超能力,依赖的产生!我们把一个“超人”作为一个类,一个超人肯定拥有至少一个超能力,这个超能力也可以抽象为一个对象。classPower{/***能力值*/protected$ability;/***能力范围或距离*/protected...原创 2020-08-02 11:31:36 · 260 阅读 · 0 评论 -
Laravel中的基本概念
参考:https://www.phpmianshi.com/?id=37一.什么是 DI依赖注入/IOC控制反转DI依赖注入啥都不说,直接上代码<?phpclassUserController{private$user;function__construct(UserModel$user){$this->user=$user;}}$u...原创 2020-08-02 10:35:04 · 199 阅读 · 0 评论 -
设计模式的基本原则
设计模式设计模式的世界丰富多彩,比如生产一个个「产品」的工厂模式,衔接两个不相关接口的适配器模式,用不同的方式做同一件事的策略模式,构建步骤稳定、根据构建过程的不同配置构建出不同对象的建造者模式等。面向对象结合设计模式,才能真正体会到程序变得可维护、可复用、可扩展、灵活性好。设计模式对于程序员而言并不陌生,每个程序员在编程时都会或多或少地接触到设计模式。无论是在大型程序的架构中,亦或是在源码的学习中,设计模式都扮演着非常重要的角色。设计模式基于六大原则 开闭原则:一个软件实体如类、模.原创 2020-07-30 15:03:38 · 200 阅读 · 0 评论 -
代理模式、桥接模式、中介者模式区别和联系
参考:https://www.phpmianshi.com/?id=134联系在现实生活中,如房屋中介、买房人、卖房人,房屋中介是一个中介,因为它担任买房人和卖房人之间的相同;房屋中介也是一个代理,它在卖房人眼前是买房人的代理,在卖房人眼前是买房人的代理;最后房屋中介也是一个桥接,用于连接买房人和卖房人。那这字面意思相似的三者到底有什么不同的应用场景。代理模式场景 1. 最常见的就是数据库中间件,他们代理了数据库的访问,访问一个集群跟访问一个单机数据...原创 2020-07-30 14:50:31 · 3441 阅读 · 1 评论 -
php中介者模式
参考:https://www.phpmianshi.com/?id=145概念中介者模式用于开发一个对象,这个对象能够在类似对象相互之间不直接相互的情况下传送或者调解对这些对象的集合的修改。一般处理具有类似属性,需要保持同步的非耦合对象时,最佳的做法就是中介者模式。PHP中不是特别常用的设计模式。场景 我们有一个CD类和一个MP3类,两个类的结构相似。 我们需要在CD类更新的时候,同步更新MP3类。 传统的做法就是在CD类中实例化MP3类...原创 2020-07-28 21:17:41 · 142 阅读 · 0 评论 -
php中的状态模式
参考:https://www.phpmianshi.com/?id=140概念状态模式当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。角色上下文环境(Work):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的具体对象来处理。抽象状态(State):定义一个接口以封装使用上下..原创 2020-07-27 20:02:55 · 187 阅读 · 0 评论 -
php中的模板模式
参考:https://www.phpmianshi.com/?id=139概念在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这种类型的设计模式属于行为型模式。示例<?phpabstract class Game{ ..原创 2020-07-26 12:57:18 · 149 阅读 · 0 评论 -
php中的依赖注入模式
参考:https://www.phpmianshi.com/?id=131概念依赖注入模式(Dependency Injection),用松散耦合的方式来更好的实现可测试、可维护和可扩展的代码。依赖注入模式是控制反转(Inversion of Control)的一种实现方式。要实现控制反转,通常的解决方案是将创建被调用者实例的工作交由 IoC 容器来完成,然后在调用者中注入被调用者(通过构造器 / 方法注入实现),这样我们就实现了调用者与被调用者的解耦,该过程被称为依赖注入。示..原创 2020-07-26 12:48:03 · 191 阅读 · 1 评论