查找重复字符
给出一个字符串,返回里面连续字母的个数,比如:abbcddde,返回 1a2b1c3de; 1234567891011121314151617181920function str($str){ $res = ''; $arr = str_split($str);//把字符串变成数组 $len = count($arr); $key = 0; // key 用来记录下标,为了方便计算前面的数字 for ($i = 0; $i < $len; $i++) { $nk = $i + 1; $v = $arr[$i]; // 俩值不相同时 if ($arr[$i] != $arr[$nk]) { // 重复次数 $num = $nk - $key; $res .= $num . $v; // 不相等时计算出前面的数字 $key = $nk; // 同时 key 下标重新赋值 } } return $res;}
Opcache
一、为什么需要 OPcachePHP 是脚本语言,每次请求默认都要走完整流程: 123.php 源码 → 词法分析(Lexer) → 语法分析(Parser) → 编译(Compiler) → opcode → Zend VM 执行 │ ◀──────┘ 输出结果 在没有缓存的情况下,只有最后一步是真正在做业务,前面四步每个请求都重复跑一遍 —— 极其浪费。 OPcache 把编译产物(opcode)缓存在共享内存(SHM)里,下次同一个文件请求直接从内存拿编译好的 opcode 给 Zend VM 执行,跳过前四步。 性能提升:典型业务 QPS 提升 2-3 倍,CPU 使用率显著下降。PHP 5.5 起内置,开箱可用。 二、工作原理12345678请求 1:/index.php ├─ OPcach...
PHP5与PHP7
改进的性能 - 将 PHPNG 代码合并到 PHP7 中,速度是 PHP 5 的两倍。 降低内存消耗 - 优化的 PHP 7 使用较少的资源。 标量类型声明 - 现在可以强制执行参数和返回类型。 一致的 64 位支持 - 对 64 位体系结构机器的一致支持。 改进了异常层次 - 异常层次得到了改进 许多致命的错误转换为例外 - 例外范围增加,涵盖许多致命的错误转换为例外。 安全随机数发生器 - 增加新的安全随机数发生器 API。 已弃用的 SAPI 和扩展已删除 - 各种旧的和不受支持的 SAPI 和扩展从最新版本中删除。 空合并运算符(?) - 添加了新的空合并运算符。 返回和标量类型声明 - 支持所添加的返回类型和参数类型。 匿名类 - 支持匿名添加。 零成本断言 - 支持零成本断言增加。
PHP安全
永远不要相信用户传递的任何数据 安全问题 释义 防范 SQL注入 XSS跨站脚本攻击 XSRF跨站请求伪造攻击 不充分的密码哈希 生产中打印错误日志 登录未限制 中间人攻击 命令注入 LFI XXE
PHP的工作原理
概述 CGI,通用网关接口, 用于WEB服务器和应用程序间的交互,定义输入输出规范, 用户的请求通过WEB服务器转发给FastCGI进程, FastCGI进程再调用应用程序进行处理,如php解析器,应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx 进行输出。 假设这里WEB服务器是Nginx,应用程序是 PHP,而 php-fpm 是管理 FastCGI 的,这也就是 php-fpm,FastCGI,和 Nginx 之间的关系。 FastCGI 用来提高 cgi 程序性能,启动一个master,再启动多个 worker,不需要每次解析 php.ini. 而 php-fpm 实现了 FastCGI 协议,是 FastCGI 的进程管理器,支持平滑重启,可以启动的时候预先生成多个进程。 协议模式 协议模式 定义 用途 备注 CGI 通用网关接口(Common Gateway Interface) 用于WEB服务器和应用程序间的交互,定义输入输出规范 用户的请求通过WEB服务器转发给Fast-CGI进程 Fast-CGI CGI...
PHP自动加载类机制
自动加载 在 PHP 开发过程中,如果希望从外部引入一个 class,通常会使用 include 和 require 方法,去把定义这个 class 的文件包含进来; PHP5 提供了一个类的自动装载 (autoload) 机制。 autoload 机制可以使得 PHP 程序有可能在使用类时才自动包含类文件, 而不是一开始就将所有的类文件 include 进来,这种机制也称为 lazy loading。 123function __autoload($className) { echo '__autload class:', $className, '<br />';} 123function __autoload($className) { require_once($className . "class.php"); } autoload 至少要做三件事情: 根据类名确定类文件名; 确定类文件所在的磁盘路径 在我们的例子是最简单的情况,...
进程、线程和协程
进程是资源分配的单位; 线程是CPU调度的单位; 协程是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行) 线程与进程的区别: 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 线程是处理器调度的基本单位,但进程不是 二者均可并发执行 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制 协程与线程的区别: 一个线程可以多个协程,一个进程也可以单独拥有多个协程。 线程进程都是同步机制,而协程则是异步。 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。 线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。 协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码...
GET 与 POST的区别
比较 GET POST 浏览器回退时 无害 会再次提交请求 BookMark URL地址可以被BookMark 不可以 编码 仅支持URL编码 多种编码方式 缓存 会被浏览器主动缓存 不会缓存,除非手动设置 历史记录 参数会被完整的保留在浏览器历史记录 参数不会被保留 限制 根据各浏览器会被限制长度 没有 数据类型 仅支持ASCII字符 没有限制 安全性 低,暴露在URL上 相对较高 传递方式 拼接在URL上 放在Request Body中 TCP数据包 1个 2个
MarkDown
一、Markdown 是什么Markdown = 纯文本 + 极少的标记语法,可以一键转成 HTML。 它解决的问题:用 Word 写技术文档要切到鼠标改格式,写代码块还要变字体;用 HTML 又啰嗦不好读。Markdown 让你专心写内容,格式靠几个符号搞定。 主要使用场景: GitHub README、Issue、PR 描述 静态博客(Hexo、Hugo、Jekyll、VitePress) 技术文档(GitBook、MkDocs、Docusaurus) 笔记软件(Obsidian、Typora、Notion 部分支持) 即时通讯(Slack、Discord、Telegram、微信公众号编辑器) 二、基础语法标题123# 一级标题## 二级标题### 三级标题 强调1234*斜体* 或 _斜体_**粗体** 或 __粗体__~~删除线~~==高亮==(部分实现支持) 列表123456789- 无序- 项目 - 嵌套(4 空格或 1 Tab)1. 有序2. 列表- [ ] 任务(未完成)- [x] 任务(已完成) 链接 + 图片123456[文字链接](h...
PhpStorm
一、PhpStorm 是什么PhpStorm 是 JetBrains 公司基于 IntelliJ 平台为 PHP 开发者打造的 IDE。和 VSCode + 插件相比,它的核心优势是: 静态分析强:跨文件类型推导、未定义方法立刻飘红 重构无损:改类名/方法名一键全项目同步,包括字符串引用 生态整合:DB 工具、HTTP Client、终端、Git、Docker、Composer、PHPUnit 全内置 Xdebug / Zend Debugger 一键接管:断点调试、变量观察、表达式求值 框架插件:Symfony、Laravel、WordPress、Magento 官方/社区插件,识别框架约定 收费,但学生 / 开源贡献者 / 公司都有正版渠道。 二、第一次配置清单PHP 解释器Settings → PHP: 设置本地 PHP 路径(macOS Homebrew:/opt/homebrew/bin/php) 配置 Composer 配置 PHPUnit(指向 vendor/bin/phpunit) Xdebug 调试12...




