![](https://img-blog.csdnimg.cn/20210224101950823.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
PHP
文章平均质量分 60
PHP
AirGo.
[WHY]每一个你不满意的当下,都有一个你不曾努力的过去。
展开
-
PHP实现opentracing链路追踪
说点废话之前写过一个GoLang版本的opentracing客户端实现,由于部门大部分服务还是用PHP实现的,所以打算用PHP实现一个基于jaeger的客户端。GoLang版本:https://success.blog.csdn.net/article/details/104100597参考文档和开源组件opentracing文档:https://wu-sheng.gitbooks.io/opentracing-io/content/pages/spec.htmlopentraci.原创 2020-10-24 23:51:00 · 2482 阅读 · 0 评论 -
GoLang开源微服务框架
https://github.com/air-go/rpc原创 2020-07-07 14:59:50 · 1429 阅读 · 0 评论 -
一致性hash算法原理和PHP实现
今天在看redis集群实现原理时,提到了一致性hash算法。已经不是第一次听到这个词了,今天特意了解了一下实现原理。关于一致性hash算法的原理,主要是核心两点:hash环:解决动态扩容大面积节点缓存失效问题 节点虚拟分区:用于保证hash环的平衡型详细原理参考大佬博客:https://blog.csdn.net/sparkliang/article/details/5279393<?php/** * 一致性哈希实现接口 * Interface ConsistentHa.转载 2020-07-15 20:35:39 · 239 阅读 · 0 评论 -
php借助Tideways扩展封装辅助函数分析代码执行性能
Tideways的安装和使用:https://success.blog.csdn.net/article/details/103365063static关键字实现单例模式:https://success.blog.csdn.net/article/details/103718450函数代码:if (!function_exists('tideways')){ function &tideways($begin = true, $file = '', $dir = '/.原创 2020-05-20 20:23:35 · 482 阅读 · 0 评论 -
不借助任何扩展和依赖,浏览器导出csv格式文件
码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071原创 2020-05-12 17:22:58 · 526 阅读 · 0 评论 -
用位图BitMap节省空间
某一个字段用于存储商品的id和商品分类id,假设分类id小于等于255,商品id小于等65535,如果用int存储,在32位机器上至少要64位,而采用位图则只需要32位即可。class Bits{ protected $bits = 0; function setGoodId($goodId) { $this->bits += $goodId...原创 2020-03-21 22:35:40 · 368 阅读 · 0 评论 -
一个日志系统需要具备哪些功能
在项目开发和线上运行不同场景下,日志系统都是不可或缺的,一般日志有以下几个作用:记录错误、性能分析、查看服务间的调用关系、记录时间等。所以我们的日志系统,就需要围绕这些需求出发来设计,一般要有如下功能点:日志配置读取:方便不同项目部署,通过更改配置文件即可 日志级别:为了减少线上日志大小,开发环境和线上环境记录错我的级别一般是不一样的,比如一般线上只记fatal和error,开发环境则需要记...原创 2020-03-16 23:29:56 · 5773 阅读 · 0 评论 -
php-redis源码之长连接、短连接、命令自动检活
源码函数所在文件为了避免代码影响阅读,以及代码顺序不符合个人的读码习惯,就不贴代码了,都可以通过函数名在下面几个c文件中找到redis.c library.c common.h几个核心函数 redis_connect:用于创建sock连接,第一个参数INTERNAL_FUNCTION_PARAM_PASSTHRU是宏定义,用来获取函数传入的参数,第二个参数persistent用...原创 2020-03-13 00:12:08 · 1142 阅读 · 0 评论 -
关于php-redis的pconnect长链接的思考
抛出问题前段时间有个大佬说,php-redis的pconnect并不能实现长链接,在请求结束后连接就被释放掉了,我心中存疑,如果是这样的话,那php-reds为什么还要有connect和pconnect?查找文档php-redis官方文档中有这样一句话:The connection will not be closed on end of request until the php p...原创 2020-03-12 15:45:53 · 1355 阅读 · 4 评论 -
PHP基JMathai封装并行Curl请求类,绑定回调处理每个结果
开箱即用的类:<?phpclass MultiLibrary{ private $curls; private $headers; private $callbacks; private $objs; private $mc; public function __construct() { $this-&g...原创 2020-03-09 22:33:05 · 227 阅读 · 0 评论 -
PHP的弱数据类型安全
弱类型比较缺陷若类型,即在变量在使用过程中无需进行类型声明,数据类型根据代码执行情况可以动态变换(区别强类型指得是每个变量和对象都必须具有声明类型,它们是在编译时就确定了类型都数据,在执行时不能更改)。由于PHP的若数据类型特性,使得PHP易学和易用,但正是由于这一点,在使用双等号‘==’和某些函数时,会造成一定的安全隐患。比如下面例子:<?php var_dump(...原创 2020-03-08 18:58:02 · 285 阅读 · 0 评论 -
关于PHP生产环境的安全配置
;关闭错误显示display_errors = Off;配置错误日志error_log = /var/log/php/error.log;隐藏PHP版本号expose_php = Off;关闭自动注册全局变量(5.6以后已移除)register_globals = Off ;限定PHP访问路径open_basedir = /home/web/php/;禁用远程URL...原创 2020-03-08 17:09:26 · 575 阅读 · 0 评论 -
PHP文件上传安全
文件上传漏洞等危害攻击者上传shell脚本,借助脚本控制服务器,随意执行命令。漏洞举例<?php $dir = 'uploads/'; $file = $dir . basename($_FILES['file']['name']); move_upload_file( $_FILE['file']['tmp_name'], $file);如果攻击...原创 2020-03-08 15:39:14 · 908 阅读 · 0 评论 -
php连接mysql报错:SQLSTATE[HY000] [2002] No such file or directory
连接数据库报错:“SQLSTATE[HY000] [2002] No such file or directory”。 出现这个问题的原因是PDO无法找到mysql.sock或者mysqld.sock。 解决方法1:找到相应的.sock文件,并设置php.ini文件中的pdo_mysql.default_socket的值为.sock文件的路径。pdo_mysql.defa...原创 2018-10-09 12:09:01 · 22058 阅读 · 2 评论 -
关于composer开发部署的思考
原理:https://segmentfault.com/a/1190000014948542官方文档:https://docs.phpcomposer.com/03-cli.html#installPackagist:https://packagist.org/composer 使用默认php版本php composer 使用指定php版本composer dump...原创 2020-03-07 19:24:17 · 678 阅读 · 0 评论 -
CI框架执行流程
index.php:1、处理项目路径,定义路径常量包含 CodeIgniter.php 核心文件CodeIgniter.php:1、加载常量文件constants.php2、加载公共方法文件Common.php3、关闭自动在溢出字符加反斜线配置magic_quotes_runtime4、检测配置是否开启register_globals全局变量注册(高版本php默认都是关...原创 2020-03-06 20:46:10 · 1079 阅读 · 1 评论 -
SSRF 服务器请求伪造攻击和 CSRF 跨站请求伪造
概念攻击者利用某服务器请求来获取内网或外网系统权限,暴力请求获取服务器端口开发情况等。攻击流程攻击者构造请求 服务器根据攻击者构造的请求对内网服务器进行请求 内网服务将请求反馈给服务器 服务器将获取到的内网资源返回给攻击者危害使服务器资源泄漏,内网服务任意扫描泄漏内网信息。容易引起SSRF的函数file_get_contents从用户指定的URL获取文件,如果用户传.........原创 2020-03-01 21:37:08 · 564 阅读 · 0 评论 -
字符串和byte相互转换,以及pack和unpack处理数据和二进制转化
最原始的字符串转byte数组的方法function string2bytes(string $str) :array{ $bytes = []; $len = strlen($str); for($i = 0; $i < $len; $i++){ $bytes[] = ord($str[$i]); } return $bytes...原创 2020-03-01 03:32:47 · 1616 阅读 · 0 评论 -
PHP实现mb_strlen
UTF-8一个汉字占2个字符,GBK一个汉字占3个字符,ASCII码最大能表示到十进制128,16进制0x80,所以当某个字符当ASCII码超出最大值128时,则代表中文汉字,再根据编码跳过对应字节数即可function mbstrlen($str, $type = 'utf-8'){ $len = strlen($str); if ($len <= 0) { retu...原创 2020-03-01 03:29:08 · 1076 阅读 · 4 评论 -
PHP使用共享内存进程间通信
创建并写入数据<?php$file = __FILE__;$key = ftok($file, 1);$size = 4096;$shmid = shmop_open($key, 'c', 0644, $size);if($shmid === false){ die('create fail');}$data = 'hello world';$packData...原创 2020-03-01 00:57:43 · 494 阅读 · 0 评论 -
PHP源码学习之 —— strtr()函数
对应源码在PHP7的地址为:/ext/standard/string.c定位某个函数的源码可以用grep匹配PHP_FUNCTION(strtr),或者把源码下载下来在PHPstrom中查找源码:PHP_FUNCTION(strtr){ zval *from; zend_string *str; char *to = NULL; size_t to_len = 0; in...原创 2019-01-19 17:10:18 · 716 阅读 · 0 评论 -
关于PHP函数前面加&
看到项目里大佬写的加载类的单例模式function &load(){ static $class = null; if($class){ return $class; } $class = new Class(); return $class;}一直不明白函数前边加&是做什么的,在网上差了好多,举的例子太乱,也没...原创 2020-02-25 17:02:58 · 485 阅读 · 0 评论 -
业务表单后端控制,减少APP发版
一般我们做开发时,都是根据产品的需求和UI的设计图,前端确定样式布局,后端确定接口返回格式,最粗暴的方法就是前端写成死的格式,后端只传动态改变的数据,但是我们都知道APP发版是需要时间的,IOS周期更长,所以我们有些文本,url等都是可以靠后端控制的,这是最基本的用法。其实还有更方便的用法,可以让后端控制表单格式,信息,排序等可控的属性,这样我们可以在app不发版的情况下调整顺序,更改必填项、默认...原创 2020-02-20 19:59:42 · 537 阅读 · 0 评论 -
PHP开启强类型检验
PHP是世界上最好的语言,开发快是它最大的优势,凡事有利必有弊。众所周知,PHP是弱类型语言,在传递参数时,不会检查变量的类型,再加上动态语言的特性,如果写代码不注意,很容易造成类型不符,自动转换类型,并且程序不会报错,造成数据错误和不完整。在PHP7之后,通过在文件开头用 declare(strict_types = 1) 定义强类型检验后,当函数传参类型不符时,将会抛出错误。...原创 2020-02-19 20:25:38 · 733 阅读 · 0 评论 -
PHP实现IOC依赖注入
<?phpclass A{ public function doAction($a) { echo __CLASS__ . ":" . 'hello' . "\n"; var_dump($a); }}class B{ private $a; public function __construct(A $...转载 2020-02-18 21:07:35 · 726 阅读 · 0 评论 -
解决PHP和GoLang写入csv文件用Excel打开乱码
使用CSV打开文件是正常的,但是使用Excel打开文件就出现了中文乱码。导出的CSV文件是UTF-8无BOM编码格式,而我Excel的UTF-8编码格式都是有BOM的,添加BOM之后,乱码就可解决。 private function _write_csv($data) { file_put_contents($this->_file_d...原创 2020-02-10 16:28:41 · 957 阅读 · 0 评论 -
PHP计算两个经纬度之间的距离
<?phpclass Location{ public function __construct() { $this->_geo_conf = array( 'pi' => pi(), 'EARTH_RADIUS' => 6378.137, ); ...转载 2020-02-05 18:18:15 · 2073 阅读 · 6 评论 -
PHP实现分布式调用链路树
function get_xhop($xhop = "", $reset = false) { static $_bhop = ""; static $_hop_num = 0; if ($reset) { $_bhop = ""; $_hop_num = 0; } if ...原创 2020-02-04 21:04:30 · 620 阅读 · 0 评论 -
PHP根据真实客户端IP+微秒时间戳+随机数生成分布式日志id
function getRealIp(){ $ip=FALSE; //客户端IP 或 NONE if(!empty($_SERVER["HTTP_CLIENT_IP"])){ $ip = $_SERVER["HTTP_CLIENT_IP"]; } //多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空 ...原创 2020-02-04 18:38:38 · 489 阅读 · 0 评论 -
PHP中的多态和GoLang中的多态
<?phpinterface Animal{ public function fun();}class Cat implements Animal{ function fun(){ echo "cat say miaomiao...\n"; }}class Dog implements Animal{ function fun(){...原创 2020-01-12 19:46:00 · 1139 阅读 · 3 评论 -
封装php-redis服务,读写分离,失败重连,单例模式,限制客户端指令集
安装和配置安装redis服务和php-redis扩展:https://blog.csdn.net/why444216978/article/details/83659776主从复制:https://blog.csdn.net/why444216978/article/details/100170179封装服务类RedisService.php<?phpclass Red...原创 2019-12-26 21:59:13 · 597 阅读 · 0 评论 -
PHP的static关键字实现单例模式和享元模式
发现最近看CI框架的源码,发现有很多方法里边用到了static变量,用于实现单例模式,之前没接触到过,今天特意研究一下。提问首先抛出一个问题,下面这段代码会输出什么?<?php function test($key = '', $value = '') { static $data = array(); if (!empty($key)) { ...原创 2019-12-26 17:10:35 · 531 阅读 · 0 评论 -
Lumen使用tideways加中间件记录慢接口以及对应接口执行的SQL
先上代码:<?phpnamespace App\Http\Middlewares;use Closure;use Illuminate\Support\Facades\DB;class ProfilerMiddleware{ public function handle($request, Closure $next) { $extens...原创 2019-12-07 17:43:26 · 540 阅读 · 0 评论 -
依赖倒置原则应用,Lumen基于PHPMailer封装邮件服务
EmailInterface<?phpnamespace App\Services\Email;interface EmailInterface{ public function send($email, $subject, $content, $attachments = []);}PhpMailerService<?phpnamespace A...原创 2019-12-06 19:11:09 · 384 阅读 · 0 评论 -
PHP不允许注册的进程信号
代码<?phppcntl_async_signals(true);pcntl_signal(SIGHUP, function(){ echo '1';}); pcntl_signal(SIGINT, function(){ echo '2';}); pcntl_signal(SIGQUIT, function(){ ...原创 2019-12-04 18:34:36 · 512 阅读 · 0 评论 -
使用Tideways和Toolkit对PHP代码进行性能分析
安装Tidewaysgit clone https://github.com/tideways/php-xhprof-extension.gitcd php-profiler-extensionphpize./configuremake && make installphp.ini加入 extension=tideways.soservice php-fpm...原创 2019-12-03 12:39:17 · 639 阅读 · 0 评论 -
PHP处理表格数据乱码,转整型变为0
1、导出excel,将数字列用excel转成对应类型2、使用excel将excel转成csv,将数字列用excel转成对应额理性3、即便前面三次都处理了,还是要注意,是否数字列仍然隐含格式字符,可以用两种方法发现转换成对应类型结果为0(字符串转整型时,如果第一位不是数字字符串,则直接转成0) 因为csv中的数据都是string类型,所以使用strlen计算,发现比实际看到的长4、根...原创 2019-11-29 17:12:30 · 969 阅读 · 0 评论 -
PHP中array_merge和'+'合并数组的区别
1、array_merge遇到重复的字符串键,保留后边的,而‘+‘保留第一个2、array_merge不会合并键为数字的元素项,而'+'会合并原创 2019-11-28 18:27:30 · 375 阅读 · 2 评论 -
聊一聊PHP的抽象、接口、特性
意义不要小看抽象、接口、特性这三个东西,虽然在开发中用起来很简单,都是别人封装好的开源项目,但是如果真正理解了,对于理解框架底层实现,以及业务抽象还是很有帮助的抽象类抽象类不可被实例化 抽象方法只能定义,不可实现方法体 抽象方法不可设置为私有 抽象方法必须被子类继承实现 抽象方法的实现,必传参数的数量和类型必须严格一致(可选默认值) 抽象类中的非抽象方法和普通继承相同 抽象...原创 2019-10-26 16:39:42 · 229 阅读 · 0 评论 -
PHP+redis+SIGALRM信号实现队列可靠消费和消费超时控制
<?phpnamespace App\Console\Commands;use App\Services\Topics;use Illuminate\Console\Command;use PhpSpec\Exception\Exception;use Symfony\Component\Console\Input\InputOption;/** * @brief ...原创 2019-10-17 20:22:40 · 493 阅读 · 0 评论