![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
php
JackMa_
每个优秀的人,都有一段沉默的时光,那段时光,是付出了很多努力,却得不到结果的日子,我们把它叫做扎根。
展开
-
mac下php8安装扩展报错:pcre/php_pcre.h:23:10: fatal error: ‘pcre2.h‘ file not found
【代码】mac下php8安装扩展报错:pcre/php_pcre.h:23:10: fatal error: 'pcre2.h' file not found。原创 2022-11-18 14:23:10 · 1309 阅读 · 0 评论 -
PHP底层的局部变量和全局变量的使用是如何实现的?
对于一个请求,任意时刻PHP都可以看到两个符号表(symbol_table和 active_symbol_table),其中前者用来维护全局变量。后者是一个指针,指向当前活动的变量符号表,当程序进入到某个函数中时,zend 就会为它分配一个符号表x同时将active_symbol_table指向a。通过这样的方式实现全局、局部变量的区分。先记录下这个问题的简单解释,后边再做研究。...原创 2022-03-17 22:45:01 · 507 阅读 · 0 评论 -
面试题:PHP字符串类型隐式转换
代码如下:$arr = [ '1' => 'c', 'a' => 'a', 1 => 1, 2, 2 => 'b'];return $arr;输出结果:原因:对于’123’这样的字符串,zend会转换为其整数形 式。$arr[‘123’]和$arr[123]是等价的...原创 2022-03-17 21:44:43 · 258 阅读 · 0 评论 -
浅析 Laravel 官方文档推荐的 Nginx 配置
浅析 Nginx 配置,方便起见,我在注释中使用[]包裹引用配置中的值。server { # 监听 HTTP 协议默认的 [80] 端口。 listen 80; # 绑定主机名 [example.com]。 server_name example.com; # 服务器站点根目录 [/example.com/public]。 root /example.com/public; # 添加几条有关安全的响应头;与 Google+ 的配置类似,详情..原创 2022-03-07 17:34:08 · 1032 阅读 · 0 评论 -
laravel 使用PhpStorm 代码提示
安装barryvdh/laravel-ide-helperlaravel代码提示 composer require barryvdh/laravel-ide-helper # add to config/app.php 'providers'数组添加 Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class, 使用 php artisan ide-helper:generate - 为Facades生成P...原创 2022-02-24 00:58:33 · 464 阅读 · 0 评论 -
在php中使用redis cluster 集群
目前我们用到的 php 的 redis 扩展 主要有2个,第一个是最常用的phpredis, 它是用c写的php的高效扩展:https://github.com/phpredis/phpredis,还有1个是predis, 它是用php代码写的,也用的蛮多的:https://github.com/nrk/predis。我们分别看下他们在集群中的用法。phpredisphpredis的安装我Mac上是有安装过phpredis扩展的,但是是2.* 版本,是不支持cluster的,所以需要升级到.转载 2022-02-21 22:51:29 · 1428 阅读 · 0 评论 -
【leetcode力扣】PHP实现:838. 推多米诺
题目推多米诺描述n 张多米诺骨牌排成一行,将每张多米诺骨牌垂直竖立。在开始时,同时把一些多米诺骨牌向左或向右推。每过一秒,倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样地,倒向右边的多米诺骨牌也会推动竖立在其右侧的相邻多米诺骨牌。如果一张垂直竖立的多米诺骨牌的两侧同时有多米诺骨牌倒下时,由于受力平衡, 该骨牌仍然保持不变。就这个问题而言,我们会认为一张正在倒下的多米诺骨牌不会对其它正在倒下或已经倒下的多米诺骨牌施加额外的力。给你一个字符串 dominoes 表示这一行..原创 2022-02-21 14:37:39 · 139 阅读 · 0 评论 -
【leetcode力扣】PHP实现:688. 骑士在棋盘上的概率
题目骑士在棋盘上的概率描述在一个n x n的国际象棋棋盘上,一个骑士从单元格 (row, column)开始,并尝试进行 k 次移动。行和列是 从 0 开始 的,所以左上单元格是 (0,0) ,右下单元格是 (n - 1, n - 1) 。象棋骑士有8种可能的走法,如下图所示。每次移动在基本方向上是两个单元格,然后在正交方向上是一个单元格。每次骑士要移动时,它都会随机从8种可能的移动中选择一种(即使棋子会离开棋盘),然后移动到那里。骑士继续移动,直到它走了 k 步或离开了棋...原创 2022-02-17 23:29:05 · 145 阅读 · 0 评论 -
腾讯云centos7.5编译安装PHP7.4
我的环境为centos-release-7-5.1804.el7.centos.x86_64下载php7.4为了方便管理, 我将所有的下载的软件都放在同一个地方, 在/data下面新建一个文件夹programscd /datamkdir programscd programs# 下载php源文件wget https://www.php.net/distributions/php-7.4.21.tar.gz这里下载的是目前最新的php版本解压文件tar -zxvf ph.原创 2021-07-07 14:40:20 · 1636 阅读 · 0 评论 -
关于 composer 下载时出现 [InvalidArgumentException] Could not find package 问题
在使用composer 时,出现的问题。 [InvalidArgumentException] Could not find package encore/laravel-admin. Did you mean one of these? encore/laravel-admin encore1/laravel-admin1 encore2/laravel-admin2 chent/laravel-project最终发现问题是,镜.原创 2021-04-30 18:54:52 · 701 阅读 · 1 评论 -
PHP实现Redis分布式锁
代码如下:class RedisLock{ protected $_genLockLogLockKey = "#gen##lock##log##lock#"; protected $_genLockLogLockValue = "#gen##lock##log##lock^^expire#value#"; protected $redis; const REDIS_LOCK_DEFAULT_EXPIRE_TIME = 60; public functi原创 2021-04-15 11:20:23 · 274 阅读 · 0 评论 -
PHP二维数组根据某个字段排序
PHP中二维数组根据某个字段排序有两种办法,一种是通过sort自己写代码,一种是直接用array_multisort排序函数。一、自定义函数PHP的一维数组排序函数:sort 对数组的值按照升序排列(rsort降序),不保留原始的键 ksort 对数组的键按照升序排列(krsort降序) 保留键值关系 asort 对数组的值按照升序排列(arsort降序),保留键值关系实现方法: 取出要排序的值组成值数组(为一维数组),按要求对值进行排序(保持键值关系),遍历值数组,按照键对应赋值给结果.转载 2020-08-14 11:16:47 · 2585 阅读 · 0 评论 -
PHP读取csv文件
现有如下csv表格,需要读取其中内容并返回内容组成的数组:实现代码如下:<?php function getFileData($file) { $return = []; if (!is_file($file)) { return [1]; } $handle = fopen($file, 'r'); if (!$handle) { retur原创 2020-08-14 10:34:06 · 522 阅读 · 0 评论 -
PHP浮点数的一个常见问题的解答
本文地址:https://www.laruence.com/2013/03/26/2884.html关于PHP的浮点数, 我之前写过一篇文章:关于PHP浮点数你应该知道的(All ‘bogus’ about the float in PHP)不过, 我当时遗漏了一点, 也就是对于如下的这个常见问题的回答:<?php$f = 0.58;var_dump(intval($f * 100)); //为啥输出57?>为啥输出是57啊? PHP的bug么?我相信有...转载 2020-08-14 10:27:30 · 178 阅读 · 0 评论 -
PHP截取字符串,带中文,多余的省略号代替
function subtext($text, $length){ if(mb_strlen($text, 'utf8') > $length) { return mb_substr($text, 0, $length, 'utf8').'...'; } else { return $text; } } $str = '风风光光vvvv仿佛从vv的地方vv吹吹风方法吃吃吃vv兴冲冲vv的风格c吃虚构c分层次感vv分vv尺寸从vvvc .原创 2020-06-03 17:19:08 · 754 阅读 · 1 评论 -
thinkPHP6 修改代码调试不实时生效的问题
最近使用thinkPHP6做开发,修改了代码,大概半分钟到 一分钟左右生效,PHP版本是7.3+,每次修改代码都需要等30-60s才会生效。解决方法:关闭opcache,这是一种解决方案,不知是PHP的opcache的问题还是thinkPHP6的问题,这个记着待以后研究一下。有的朋友也说切换PHP的版本,经过我的初步实验切换版本也是不好使的,好,就这样。...原创 2020-05-31 20:13:55 · 1854 阅读 · 0 评论 -
cURL Error #:SSL certificate problem: unable to get local issuer certificate 解决方法
这是 SSL 证书问题所致,在使用 SDK 调用微信支付等相关的操作时可能会遇到报 “SSL certificate problem: unable to get local issuer certificate” 的错误。解决方法: 下载ca证书 http://curl.haxx.se/ca/cacert.pem 进行下载或者 使用微信官方提供的证书中的 CA 证书rootca.pemphp.ini中配置 CA 证书将下载好的ca证书放置到服务器的任意位置修改php.in...原创 2020-05-30 16:09:36 · 1694 阅读 · 0 评论 -
phpstorm中xdebug配置与使用
一、下载xdebug模块xdebug网站提供一个自动分析你系统对应的xdebug版本的页面,网址是:https://xdebug.org/wizard在页面中打印出来phpinfo,然后全选中复制粘贴进上图的输入框内:点击:Analyse my phpinfo() output 按钮分析出使用的xdebug版本和下载地址:下载对应版本xdebug,然后放到php安装目录的ext目录,在php.ini文件中配置:;指定xdebug库文件的绝对路径zend_extensi原创 2020-05-24 23:53:38 · 863 阅读 · 0 评论 -
【leetcode力扣】PHP实现:35. 搜索插入位置
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6]...原创 2020-04-19 20:59:12 · 290 阅读 · 0 评论 -
【leetcode力扣】PHP实现:28. 实现 strStr()
题目:实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", n...原创 2020-04-15 22:58:36 · 311 阅读 · 0 评论 -
【leetcode力扣】PHP实现:21. 合并两个有序链表
题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解://迭代function mergeTwoLists($l1, $l2){ $dummyHead = new ListNo...原创 2020-04-13 13:05:48 · 297 阅读 · 0 评论 -
php实现一个单链表
单链表,节点只有一个指针域的链表。节点包括数据域和指针域。 因此用面向对象的思维,节点类的属性就有两个:一个data(表示存储的数据),一个指针next(链表中指向下一个节点)。 链表一个很重要的特性,就是这个头节点$head。它绝对不能少,每次遍历都要从它开始,并且不能移动头节点,应该用一个变量去代替他移动。脑袋里要有链表的结构。这是关键。 来一段代码:<?ph...转载 2020-04-13 12:26:41 · 282 阅读 · 0 评论 -
记一次PHP并发性能调优实战 -- 性能提升104%
作者: 万千钧(祝星)适合阅读人群文中的调优思路无论是php, java, 还是其他任何语言都是用. 如果你有php使用经验, 那肯定就更好了业务背景框架及相应环境laravel5.7, mysql5.7, redis5, nginx1.15 centos 7.5 bbr docker, docker-compose 阿里云 4C和8G问题背景php已经开启opca...转载 2020-04-13 11:58:10 · 431 阅读 · 0 评论 -
【leetcode力扣】PHP实现:26. 删除排序数组中的重复项
题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的...原创 2020-04-12 23:19:45 · 272 阅读 · 0 评论 -
PHP7开启opcache打造强悍性能
鸟哥在博客中说,提高PHP 7性能的几个tips,第一条就是开启opcache:记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快,所以之前测试时期就发生了有人一直没有启用Opcache的事情那么什么是Opcache呢?Opcache 的前生是Optimizer+,它是PHP的官方公司 Zend 开发的一款闭...转载 2020-04-12 12:26:59 · 439 阅读 · 0 评论 -
手动配置Swoole完美支持ThinkPHP5.1开发之排坑指南之路由篇
前言本文主要讲的是怎么在thinkPHP中配置swoole代码使其与thinkPHP协同工作。swoole版本是目前最新版4.5.0,thinkPHP的版本是5.1的,centos7+nginx1.16.1+php7.4swoole扩展安装方法:https://blog.csdn.net/Alen_xiaoxin/article/details/105048154正文1、下...原创 2020-04-08 19:36:19 · 1928 阅读 · 0 评论 -
没错,这就是面向对象编程(设计模式)需要遵循的 6 个基本原则
在讨论面向对象编程和模式(具体一点来说,设计模式)的时候,我们需要一些标准来对设计的好还进行判断,或者说应该遵循怎样的原则和指导方针。现在,我们就来了解下这些原则:单一职责原则(S) 开闭原则(O) 里氏替换原则(L) 接口隔离原则(I) 依赖倒置原则(D) 合成复用原则 及迪米特法则(最少知道原则)本文将涵盖 SOLID + 合成复用原则的讲解及示例,迪米特法则以扩展阅读形...转载 2020-04-05 23:27:40 · 392 阅读 · 0 评论 -
centos7安装PHP imagick扩展
1、安装ImageMagicwget http://www.imagemagick.org/download/ImageMagick.tar.gztar -xzvf ImageMagick.tar.gz cd ImageMagick-7.0.10-3/./configure --prefix=/usr/local/imagemagickmakemake install/usr/l...原创 2020-04-05 19:13:31 · 1473 阅读 · 0 评论 -
PHP 数组使用之道
PHP 数组使用之道这个教程我将通过一些实用的实例和最佳实践的方式列举出 PHP 中常用的数组函数。每个 PHP 工程师都应该掌握它们的使用方法,以及如何通过组合使用来编写更精简且易读的代码。另外,我们提供了相关示例代码的演示文稿,你可以从相关链接下载它,并分享给你的团队来打造更强的团队。入门先让我们从一些处理数组键名和键值的基础数组函数开始。array_combine()作为数...转载 2020-04-04 21:35:08 · 241 阅读 · 0 评论 -
PHP中被忽略的性能优化利器:生成器yield
如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生。但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显。但是,生成器功能的确非常有用。官方解释:生成器提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。生成器允许你在foreach代...转载 2020-04-04 18:03:43 · 202 阅读 · 0 评论 -
php yield关键字以及协程的实现
php的yield是在php5.5版本就出来了,而在初级php界却很少有人提起,我就说说个人对php yield的理解Iterator接口在php中,除了数组,对象可以被foreach遍历之外,还有另外一种特殊对象,也就是继承了iterator接口的对象,也可以被对象遍历,但和普通对象的遍历又有所不同,下面是3种类型的遍历情况:可以看出,迭代器的遍历,会依次调用重...转载 2020-04-04 17:33:16 · 624 阅读 · 0 评论 -
centos7+php7.4安装xhprof收集API接口开销
xhprof 是 Facebook 09 年出的一个很优秀的 PHP profiler 工具,但 Facebook 后来迁移到 hhvm,早已不再维护,它在 PHP7 下有诸多 bug。本文使用的是github上别人做的兼容PHP7的xprof项目。安装cd ~/sourcegit clone https://github.com/longxinH/xhprofcd xhprof...原创 2020-04-04 13:57:10 · 787 阅读 · 0 评论 -
API接口性能相关总结
以PHP开发的接口服务为例总结一下接口相关的性能调优和监控:1、接口性能信息收集关注接口整体时间开销: ①、可通过在接口调用前后打点算差值。 ②、通过nginx配置在access_log日志里打出$request_time,请求响应的时间。来查看接口的响应速度。 xhprof收集API接口开销: 关注子环节时间开销。2、API时间开销定位和分析时间开销情况分析: 推荐用xh...原创 2020-04-04 11:38:54 · 864 阅读 · 0 评论 -
PHP实现一个类,实现一个数组的循环队列,入队列、出队列
class list { private $size = 100; private $arr = []; public function __construct(int $size) { if ($size > 1) { $this->size = $size; } } //入...原创 2020-03-31 23:10:47 · 334 阅读 · 0 评论 -
快速排序之PHP实现
前言快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(lis...原创 2020-03-30 17:54:44 · 239 阅读 · 0 评论 -
插入排序之PHP实现
前言插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。算法步骤1、将第一待排序序列第一个元素看做一个有序序列,把第二个...原创 2020-03-30 16:38:53 · 321 阅读 · 0 评论 -
选择排序之PHP实现
前言选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。算法步骤1、首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。3、重复第二步,直到所有元素均排序完毕。动图演示PHP...原创 2020-03-30 16:30:05 · 250 阅读 · 0 评论 -
交换排序之PHP实现
类似冒泡排序:https://blog.csdn.net/Alen_xiaoxin/article/details/105201729functionExchangeSort($arr){$num=count($arr);//遍历数组for($i=0;$i<$num-1;$i++){//获得当前索引的下一个索引...原创 2020-03-30 16:22:37 · 254 阅读 · 0 评论 -
冒泡排序之PHP实现
前言冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第...原创 2020-03-30 16:05:45 · 192 阅读 · 0 评论 -
PHP7的新特性
一、前言截止目前PHP7,2020年3月29日,最新稳定版本是7.4.3,可通过https://www.php.net/releases/index.php查看。以下代码适用于PHP7.1.0及以上版本。二、新特性1、太空船操作符<=>太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。...原创 2020-03-29 17:16:50 · 405 阅读 · 0 评论