
php
文章平均质量分 70
主要以PHP高级知识为主
森叶
多年谷歌插件开发、Electron 客户端开发经历 偏前端全栈开发工程师 熟练使用PHP、Python、Javascript、Java 四种语言
王森出品 必属精品
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节
本文深入探讨了JIT(即时编译)技术及其在不同编程语言中的应用,特别是PHP、Java和Python。JIT通过在程序运行时将频繁执行的代码编译成机器码来提升性能,尤其适用于常驻内存的应用,如Java服务和PHP的Swoole/Workerman。文章还对比了CGI和FastCGI协议,解释了它们在Web服务器中的应用场景和性能差异。此外,文章详细介绍了Python的WSGI和ASGI服务器,如Gunicorn和Uvicorn,以及它们如何与通用Web服务器(如Nginx)协同工作,以优化Python We原创 2025-05-12 19:46:04 · 991 阅读 · 0 评论 -
hyperf yasd 远程调试 swoole sdebug 远程调试以及 window+centos 共享文件夹 问题汇总
修正:yasd 调试在IDE上是不能调试vendor中的代码的,具体原因不详,网上很多讲解都是互相Copy,讲得都是Controller代码,或者让你记得要打断点在代理类上,这个都没问题,但是使用IDE,直接设置断点并没有讲,估计他们也没用过,普通PHPer估计开始用打日志了。这个不推荐了,不能结合IDE快递设置断点调试,就显得很鸡肋,之前也是用得不够细,所以没有发现这个问题,这里仍然保持这些教程,有想法的同学可以自己试试。原创 2021-04-21 17:28:09 · 2960 阅读 · 4 评论 -
linux如何与windows进行共享文件夹开发,不用来回用git进行拉来拉去,这个对于swoole开发者来说特别重要
linux那边安装samba,此处不再赘述,百度一堆教程,设置一个最简单的共享文件夹,一般是放nginx运行代码的地方,我的是web,将web设置用户为samba(你创建的,直接用root不行),权限设置为777,要加-R,迭代设置。你可以用phpstorm打开这个盘中的文件夹,phpstorm操作文件代码时会自动同步到linux那边的服务器,非常爽。(补充):samba配置。原创 2025-04-01 14:27:11 · 329 阅读 · 0 评论 -
WSL 2 轻量级安装 Centos7 实现无缝衔接,hyperf 开发再也不用 window 映射共享文件夹了
在很久很久以前,如果想要开发 php 的 hyperf 框架,你需要先装个 virtualbox,然后再安装一个 centos,再在 centos 里面配置 ssh,然后 virtualbox 再来个桥接网络,最后再在 centos 安装一个 smb 共享文件夹服务,之后再在 windows 这边配置文件夹映射到 centos 中的 smb.service 服务共享的文件夹,实现代码同步,一阵操作猛如虎,把新人搞得头晕眼花,只要在这个环节中,卡住任何一点,新人就放弃了。启用 CEntOS7 系统。原创 2025-04-01 13:25:37 · 639 阅读 · 1 评论 -
phpstorm中使用 phpunit 时的配置和代码覆盖率测试注意点
在使用 Composer 中,修改了 composer.json 中的 autoload-dev 配置(例如 PHPUnit 版本),想要让这些修改生效,需要运行哪些 Composer 命令?原创 2023-12-12 00:40:04 · 389 阅读 · 0 评论 -
Java 和 PHP GC 的差异和差异出现的原因
垃圾回收(Garbage Collection,GC)是编程语言中的一项关键功能,用于自动管理内存,防止内存泄漏和提高程序的可靠性。不同的编程语言采用不同的GC机制,以下是对Go语言和Python的GC机制的概述。Go语言的GC机制具有并发性、分代回收、标记-清除算法和三色标记法等特点。它能够在程序运行时执行垃圾回收,不会导致停顿,适用于高并发应用。分代垃圾回收提高了回收效率,标记-清除算法处理循环引用,而三色标记法减少了标记和清除的阶段。Go语言还提供了灵活的垃圾回收时间控制和内存分配优化。原创 2023-09-07 11:59:03 · 499 阅读 · 0 评论 -
Hyperf 如何做到用两个端口 9501/9502 都能连接 Websocket 服务以及多 Worker 协作实现聊天室功能
为何 Hyperf 能够在两个端口上监听 WebSocket 连接?源码角度来看,在配置了多个 Servers 时,实际上,只启动了一个 Server注:我之前接触的代码都是启动一个服务绑定一个端口,之前也看过 swoole 扩展的文档,但是没留意服务和监听端口也是分离的,这启发了我一种思维,代码凡是能继续拆分的,就继续拆分,这样代码就会有更多的灵活,每个功能都能进行扩展,将服务和端口进行拆分之后,就可以在一个 Server 绑定多个 Port,每个 Port 又能有独立的事件。原创 2023-08-21 11:33:01 · 1935 阅读 · 0 评论 -
PHP匿名类的使用场景有哪些?PHP匿名类怎么用?有什么好处?PHP匿名类如何在运行时动态生成?
在一些特定场景下,使用匿名类可以代替具名类,这主要是因为匿名类具有一些独特的特性,例如可以动态创建类、作为回调函数参数传递、创建一次性对象等等。具体来说,匿名类可以在创建对象时定义类的结构,可以方便地为不同的对象提供不同的实现。例如,在使用回调函数时,匿名类可以作为回调函数的参数,动态地创建一个对象,而无需预先定义具名类。此外,匿名类还可以被用于创建一次性对象,这些对象通常只在一个方法或函数内部使用一次,因此不需要为它们定义一个具名类。总之,匿名类提供了更为灵活的方式来定义对象,并能够满足特定场景下的需求。原创 2023-04-24 14:42:48 · 771 阅读 · 0 评论 -
桌面端应用接口版本兼容设计和使用原则
早期开发时,由于选型架构等问题,老旧接口仍然要正常运行,需要逐步引导客户使用新版,但是接口由新团队进行开发,比如 PHP 转成了用 Go 来开发,响应更快,并发更大,新的接口又和老的接口逻辑相近,但传入传出都不相同,这种巨大差异,不应该在原版接口中改动,容易产生灾难性的影响,因此,我们会在 url 上进行处理,例如 url 中接口版本为/api/v1,等到新接口采用/api/v2,这样就有效的改善了新版用户的无缝衔接,接口版本非常少,如果公司接口版本搞得很多,绝对出问题了。原创 2023-03-15 23:24:17 · 1869 阅读 · 0 评论 -
Yii2下PHP远程调试PHP5.6/7.2与Xdebug2.5/2.7/3.0 在PHPSTORM下的差异化表现
因为yii2框架,设计复杂度非常高,加上php代码的弱类型语言结构,在代码非常复杂的情况下,不采用调试的方式来看源码调用栈,几乎是灾难性的,所以我们必须解决phpstorm下的远程调试问题。xdebug.profiler_output_dir = /tmp/xdebug #可以删除,profiler是个分析器会。xdebug.trace_output_dir=/tmp/xdebug #可以删除,跟踪日志也没有必要加上。docker下安装php,xdebug的远程配置,phpstorm的远程配置。原创 2023-01-12 15:05:16 · 644 阅读 · 0 评论 -
PHP闭包的实际应用场景
PHP 闭包在面试中,很多人就是知道这个形式,一旦问他们在那些场景下使用,基本都回答不上来,整个优快云上有对闭包源码实现加以解读的,也有举例闭包的几种用法,我这里补充几个应用场景,进一步将闭包的应用进行落地。原创 2022-12-26 12:03:52 · 447 阅读 · 0 评论 -
用维度概念来定义初级、中级、高级程序员
网络上众说纷纭,大都站立在对某一技术的知识掌握量上来界定,或者有些人说着说着,发现无法自圆其说,然后就说这三种人就是一种叫法,你觉得你是高级你就高级了,从概念上讲,这三者之间必然有质的区别,单纯以量是无法划分的,为此,我来定义这三个边界。原创 2022-12-21 17:59:37 · 924 阅读 · 0 评论 -
mac m1 安装docker docker 安装php 5.6 和 7.2 避坑指南
配置完成后,本地就可以使用远程的php解释器了,此外采用docker共享文件夹的方式,可以做到代码修改的是同一个位置,达到了无需再将phpstorm上传到docker中去。在配置xdebug.ini时,参照以下截图,docker访问宿主机时必须是要docker自己提供的host才能访问,再次强调。这里有各种php版本绝对够用了,还有php完整版的扩展,非常方便,虽然没有python的conda那么屌,但也是解决方案。下载zip,解压,然后按照github的步骤,一步步搞下来,就装成功了。原创 2022-12-10 12:35:09 · 3863 阅读 · 0 评论 -
阿里云OSS图片存储跨域配置 OSS CDN跨域配置截图
采用了OSS的CDN加速,会导致请求的同一个URL被随机分发到源服务器和CDN服务器,因为CDN服务器并未配置跨域,导致随机到CDN服务器时,就会报跨域错误,而随机到源服务器时就没事,这就造成时好时坏,让我当时完全摸不着头脑,记录下来...原创 2020-07-30 17:13:31 · 2062 阅读 · 0 评论 -
PHP foreach使用 & 引用详细过程解读
解决这个问题的方式,则是及时的将引用释放掉unset($a),与下面的$a变量不混淆,只要及时的unset($a),再次出现$a时,php会自动地将$a设置为一个普通变量,并分配它自己的地址和值空间,每次foreach都是提取数据往$a的值中拷贝。这个过程很清晰了,在第一次循环后,$a作为引用,最后一次循环时,是直接把$arr元素的最后一个地址赋值给了$a,所以$a是一个引用,且指向最后$arr的最后一个地址,从分界线以前就能发现$a输出的是9。这样讲解就清晰明了了。原创 2022-11-10 11:09:15 · 1113 阅读 · 0 评论 -
php-fpm,uwsgi,tomcat,hyperf 处理区别
从php迁移到python过程中,我想不明白为何php-pfm能做到不重启就能加载代码,而uwsgi却必须重启,两者之间的区别是什么?两者为和要做出这种差异?那uwsgi和hyperf框架是一样的吗?为何最早期的servlet能够调用服务器级别的Application?原创 2022-10-14 19:25:38 · 1469 阅读 · 2 评论 -
PHP转GO 的正确打开路径 从hyperf,ES6,Python 到 Go
彻底打破PHP直接转GO语言的误区,充分将PHP转GO的正确方式给出,按照此渠道直接打通任督二脉,从此啥高级语言都不再是拦路虎原创 2022-04-06 17:17:32 · 4113 阅读 · 1 评论 -
git 基于码云webhook 方式,结合nginx,php建立git自动更新
nginx.conf反向代理配置:server { listen 80; server_name git.XXX.com; #这里域名自己自定义 location / { proxy_pass http://127.0.0.1:9666; # 转发规则 proxy_set_header Host $proxy_host; # 修改转发请求头,让8080端口的应用可以受到真实的请求 proxy_set_header X-Real-IP $re...原创 2020-11-23 13:52:16 · 268 阅读 · 0 评论 -
消息队列rabbitmq php7.2安装 详细教程 erlang和rabbitmq要用rpm安装 centos7和windows wamp3
RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统,底层基于Erlang语言。一:centos7安装RabbitMQ这玩意儿安装很扯淡,官方推荐rpm安装,rpm安装本身是最简单的,但是安装RabbitMQ却不简单,很可能需要修改仓库地址。不同linux版本不一样,centos6和centos7也不一样。我这里不用rpm,手动编译Erlang,然后选择编译好的RabbitMQ。1:安装Erlang1):先安装几个必要的插件$ yum -y install gcc .原创 2020-06-16 15:28:22 · 551 阅读 · 0 评论 -
解决phpstorm使用自己安装的svn命令,这里用到的是乌龟SVN,解决C:\Program Files空格问题
巧妙点在于原来的C:\Program Files 这里有个空格,网上找到有个PROGRA~1这种神写法,顺利的解决了问题,从此爽歪歪了原创 2020-06-05 16:23:55 · 386 阅读 · 0 评论 -
php 扩展函数openssl_decrypt 使用注意事项
一般都采用原生数据进行处理,通过text/json方式传输,避免base64数据被urlencode进行转码$key和$iv都是二进制的,不是二进制,要转成二进制,再传入进去$data1 在原生数据状态下,必须先从base64转成二进制,否则解析不了至于另外一种base46模式,建议不要使用就对了,原生处理最简单openssl_decrypt($data1, "AES-128-CBC", $key, OPENSSL_RAW_DATA, $iv)...原创 2020-05-21 12:45:23 · 8693 阅读 · 0 评论 -
phpstorm开发器配置babel支持ES5开发,避免搭建node.js环境
安装node.js npm install --save-dev babel-cli npm install babel-preset-es2015 --save-dev 设置phpstorm接受的语言是ES6,不然写es6语法提示报错: 配置Babel,在根目录中创建.babelrc文件,内容如下 配置watchers 效果就是任何工程文件内新建一个.es6的文件都会...原创 2019-08-23 18:19:01 · 178 阅读 · 0 评论