
php
文章平均质量分 51
迷路的羔羊~
我还是从前那个胖子...
展开
-
php设置时区
一. php代码中修改# 方法一date_default_timezone_set('Asia/Shanghai');# 方法二(我测试不生效,不确定是什么原因)ini_set('date.timezone','Asia/Shanghai');二. 修改php.ini配置data.timezone = "Asia/Shanghai";原创 2022-03-04 17:12:33 · 180 阅读 · 0 评论 -
语义化版本 2.0.0
语义化版本 2.0.0摘要版本格式:主版本号.次版本号.修订号,版本号递增规则如下:主版本号:当你做了不兼容的 API 修改,次版本号:当你做了向下兼容的功能性新增,修订号:当你做了向下兼容的问题修正。先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。简介在软件管理的领域里存在着被称作“依赖地狱”的死亡之谷,系统规模越大,加入的包越多,你就越有可能在未来的某一天发现自己已深陷绝望之中。在依赖高的系统中发布新版本包可能很快会成为噩梦。如果依赖关系过高,可能面转载 2022-03-01 10:45:44 · 125 阅读 · 0 评论 -
ubuntu20编译安装php7.4
一. 下载php源码包,当前最新版本为7.4.28wget https://www.php.net/distributions/php-7.4.28.tar.gz二. 解压缩tar xzf php-7.4.28.tar.gz三. 安装依赖和工具,这些lib文件不是必要,是你要安装那个php扩展依赖这个lib才要安装,比如php的openssl依赖openssl和libssl-dev才能使用apt install gcc make openssl curl libssl-dev libxml2-原创 2022-02-22 17:06:18 · 2344 阅读 · 0 评论 -
php之通过反射实现自动注入参数
转载:https://blog.youkuaiyun.com/pharaoh_shi/article/details/77964455转载 2020-11-22 22:04:12 · 147 阅读 · 0 评论 -
php之魔术常量
名称说明__LINE__文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。__DIR__文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。\__FUNCTION__前函数的名称。匿名函数则为 {closure}。 \__CLASS__当前类的名称。类名包括其被声明的作用区域(例\如\ Foo\Bar)。注意自 PHP 5.4 \起\ CLASS...原创 2020-11-22 16:18:49 · 115 阅读 · 0 评论 -
php之定义常量define和const的区别
定义常量有两种方式,分别是define和constdefine:值可以是int、 float、string、boolean、NULL、array 、resource可以在任意地方定义由于是在脚本执行期间定义,值可以是未知的 (这个跟const的最大区别)定义的键名可能不区分大小写const值可以是int、 float、string、boolean、array 、resource只能在最顶端的作用区域定义,不能在逻辑结构中定义值只能是已知的,不能传递变量,因为const是在编译期间执行原创 2020-11-22 00:14:09 · 116 阅读 · 0 评论 -
php之nginx配置
server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /var/www/html/test1; index index.html index.htm index.php; location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.ph原创 2020-11-21 18:12:03 · 217 阅读 · 0 评论 -
php之学习redis
1. 官方文档,也是最全的文档,但是是英文的,所以阅读需要一些耐心,也可以当做手册使用2. 一个简单版的手册,方便查阅,但是信息不全3. 一些关于运维方面的问题和实现4. 基础的一些使用都有说到,入门的可以看一下5. 菜鸟教程的redis教程,小白最好先看一下6. php 实现redis 订阅发布...原创 2020-11-18 18:48:13 · 134 阅读 · 0 评论 -
php之redis subscribe超时问题及解决
一. 问题描述redis提供了pub/sub功能,但在使用phpredis的subscribe时发现这样一个问题,代码如下(sub.php):<?php/*监听demo频道,打印收到的信息*/function process($redis, $chan, $msg){ var_dump($msg);}$redis = new Redis();$res = $redis->connect('127.0.0.1', '7979');$redis->subscribe(转载 2020-11-18 17:34:55 · 1587 阅读 · 0 评论 -
php之ip2long和long2ip操作ip
基本使用$ip = '192.168.110.110';// 转为数字$ip_long= ip2long($ip);// 转回ip格式$ip = long2ip($ip_long);在32位系统中ip2long会出现负数的问题,需要移除负号$ip = '192.168.110.110';// 转为数字$ip_long= ip2long($ip);// 转回ip格式$ip = long2ip($ip_long);// 去除负号$ip_long2 = sprintf('%u',$ip原创 2020-11-17 22:22:09 · 393 阅读 · 0 评论 -
php之引用函数
原理就是当$a = &get()时,实际上是 $a 引用了 $b,也就是引用了函数的返回变量,所以get()才会是100<?php// 声明引用函数function &get(){ // static必须是静态,不然函数执行完释放了,引用也就没有了意义 static $b = 10; return $b;}// 直接使用$a = get();var_dump($a); // 10// 修改值$a = 100;var_dump($a); //原创 2020-11-17 21:12:26 · 719 阅读 · 0 评论 -
php之安装mongodb扩展
官方的扩展说明文档1. 安装如果没有安装pecl库,参考官方安装,点击跳转$ sudo pecl install mongodb2. 添加到配置,cli和fpm的 php.ini 都要加extension=mongodb.so 3. 加完配置后重启进程# ubuntu环境下的7.3版本php$ sudo systemctl reload php7.3-fpm ...原创 2020-11-16 21:27:58 · 167 阅读 · 0 评论 -
php之redis秒杀(自己捣鼓的一套代码)
生产者实际上秒杀是有活动时间限制,需要把活动时间、活动状态、数量、产品ID等信息整合到redis中,根据前端过来的产品ID直接获取对应产品信息// 模拟用户id$userid = rand(1000, 99999);// 秒杀最大数量$max = 100;// 限购if ($redis->hExists('hash_miaosha_11011', $userid)) { echo '每人限购一件';exit;}// 秒杀完了if ($redis->hLen('h原创 2020-11-15 23:54:30 · 198 阅读 · 0 评论 -
php之文件锁阻塞和非阻塞模式
阻塞模式// 阻塞模式:多人访问时,当有第二个用户请求,会等待第一个用户请求释放锁,然后在获得文件锁后,程序才会继续运行下去$fp = fopen('lock.txt', 'w');// 获取锁flock($fp, LOCK_EX);// 释放锁flock($fp, LOCK_UN);非阻塞模式// 非阻塞模式:多人访问时,在取得锁的用户释放锁之前,其他的访问用户会返回系统繁忙$fp = fopen('lock.txt', 'w');// 获取锁if (!flock($fp,原创 2020-11-15 21:05:35 · 506 阅读 · 0 评论 -
php之redis操作大全
转载 2020-11-15 18:42:58 · 107 阅读 · 0 评论 -
php之composer自动加载类库原理
开始之前最好自己去写一个简单的自动加载器,去了解一下是怎么样把文件引入进来的加载 Composer\Autoload\ClassLoader 类,这个是自动加载核心类将顶级命名空间和文件目录映射加载到 ClassLoader 类中注册自动加载器 Composer\Autoload\ClassLoader 类中 loadClass 方法当触发命名空间自动加载器时,自动获取路径文件并引入关键在于将顶级命名空间和目录映射存储到类中,当触发自动加载器时,自动加载器会逐个去变量中匹配顶级命名空间或者完整原创 2020-11-15 17:10:19 · 290 阅读 · 0 评论 -
php之为什么要使用use关键字
主要原因是:引入有命名空间的类文件,必须使用use声明类所在的空间,如果不使用命名空间,直接引入文件后可以直接使用,不需要use引入有命名空间的类文件,如果不使用use声明类的地址,直接调用的话,会默认在当前文件(空间)中查找这个类,未查找到该类会抛出致命错误Fatal error: Uncaught Error: Class 'Log' not found...原创 2020-11-15 13:11:29 · 350 阅读 · 0 评论 -
php之composer-composer.json参数autoload详解
简介Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。对于类库的自动加载,Composer 生成了一个 vendor/autoload.php 文件。引入这个文件,就能得到一个免费的自动加载支持,这种感觉真是棒极了~本文主要是介绍如何利用 Composer 自带的自动加载机制,加载本地自定义的包(即不是来自于 packagist)。使用1. 在 composer.json 文件中的 autoload 字段中添加自己的 autoloade转载 2020-11-14 22:45:37 · 2033 阅读 · 0 评论 -
php之容器、控制反转IoC、依赖注入DI
容器容器也叫IoC容器,作用是管理对象实例化到配置的过程和对象和对象间的依赖关系设计思想就是控制反转容器具有绑定和解析两个基础操作IoC控制反转这是一种设计原则设计目的是尽可能降低类对象间的耦合度、降低代码间的耦合度常见的实现方式由:依赖注入(Dependency Injection,简称DI)、依赖查找(Dependency Lookup)DI依赖注入从外部注入注入指定对象不在当前对象中维护需要实例对象的代码参考文章:百度百科对控制反转的具体说明概念说的比较全面的原创 2020-11-14 21:12:53 · 146 阅读 · 0 评论 -
php之homestead作为thinkphp5的开发环境
出现这个问题的主要原因的laravel和thinkphp的参数解析不一致,thinkphp的需要使用s=参数,所以需要定制一个thinkphp配置1. 在Homestead/scripts目录下新建serve-thinkphp5.sh文件,写入以下内容这个是复制serve-laravel.sh文件修改的,实际上差异只有 location / {}部分#!/usr/bin/env bashdeclare -A params=$6 # Create an associative arrayp原创 2020-11-13 12:37:18 · 305 阅读 · 0 评论 -
php之像访问数组一样访问对象
这个主要是ArrayAccess(数组式访问)接口提供的能力,官网地址:https://www.php.net/manual/zh/class.arrayaccess.php附上一个基础版本示例:<?php/** * 数组式访问对象 */class Test implements arrayaccess{ public $vars; public function offsetExists($offset) { return isset($th原创 2020-11-12 22:31:06 · 180 阅读 · 0 评论 -
php之双向队列
这只是一个基础版本的双向队列/** * 双向队列 */class TwoWayQueue{ // 队列 private $queue = []; /** * [setFirst 数组开头插入一个元素] * @param [type] $item [description] */ public function setFirst($item) { return array_unshift($this->qu原创 2020-11-12 21:26:44 · 145 阅读 · 0 评论 -
php之普通变量赋值、对象赋值、引用赋值的区别
php中变量赋值默认是赋值传递,但是对象类型比较特殊,默认是引用传递这涉及到php的深复制和浅复制,有兴趣的可以看看1. 原始类型 – 直接赋值$name1 = 'sky';$name2 = $name1;$name2 = 'fly';echo $name1.' '.$name2; //sky fly2. 数组array – 直接赋值$arr1 = array(0, 1, 2, 3);$arr2 = $arr1;$arr2[0] = 6;echo $arr1[0].' '.$转载 2020-11-12 18:23:03 · 352 阅读 · 0 评论 -
php之laravel系列-安装homestead环境
learnku社区的教程,非常详细安装后的一些问题1. 想要安装插件,需要使用国内的源,不然vagrant慢的你怀疑人生,查看解决方案2. 配置多个laravel工程(多个项目),查看解决方案3. 每次配置新项目需要修改Homestead.yaml文件后再修改hosts文件,需要修改Homestead.yaml文件后自动配置hosts文件,解决方案4. 切换PHP版本,解决方案,建议在Homestead.yaml文件sites字段中配置,避免每次服务器PHP版本修改带来的问题5. 安装插件后,.原创 2020-11-12 01:17:34 · 187 阅读 · 0 评论 -
php之从二维数组中根据键和值获取符合的数据数据
/** * 在二维数组中,根据键和值获取所有符合的数据 * @param array $array [description] * @param string $key [description] * @param string $value [description] * @return [type] [description] */function search_two_dimensional_array_list_data(array $array, strin原创 2020-11-10 23:32:33 · 1193 阅读 · 0 评论 -
php之生成uuid和guid
关键在于create_uuid和create_guid方法<?php/** * 单例模式: 获取uuid或者guid */class GetUUID{ // uuid private $uuid; // 容器 private static $instance; /** * 获取实例 */ public static function getInstance() { if (!(self::$i原创 2020-11-10 17:16:59 · 383 阅读 · 0 评论 -
php之从url获取文件后缀
<?php// 使用pathinfo函数分解url$url = 'http://c.xxx.net/view/45.html?id=123123';$ext = pathinfo($url);$ext = explode('?', $ext['extension']);$ext = $ext[0];var_dump($ext);# 使用parse_url函数分解url$url = 'http://c.xxx.net/view/45.html?id=123123';$ext =原创 2020-11-08 17:20:21 · 418 阅读 · 0 评论 -
php版微信红包算法
这里只实现了金额计算,业务逻辑需要自行处理<?php/** * 微信红包算法 */class Hongbao{ // 总金额 private $price; // 红包总数 private $number = 1; // 剩余红包金额 private $availablePrice; // 剩余红包数量 private $numbers; // 每个红包最小金额 private $minPrice =原创 2020-09-22 17:10:33 · 322 阅读 · 0 评论 -
php操作rabbitmq(5)
官方示例地址交互机交换方式topic和direct在代码上没有任何区别,区别的是direct绑定key是全等才会匹配,而topic可以模糊匹配,在场景不确定的情况下建议使用topic。<?php/** * 生产者 * emit_log_topic.php */require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Messa原创 2020-09-18 16:23:12 · 145 阅读 · 0 评论 -
php操作rabbitmq(4)
官方示例地址使用方法:打开2个shell窗口,一个运行php emit_log_direct.php info "test message",一个运行php receive_logs_direct.php info,只接受指定key的信息<?php/** * 生产者 * emit_log_direct.php */require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConne原创 2020-09-18 15:28:02 · 132 阅读 · 1 评论 -
php操作rabbitmq(3)
官方示例地址使用方法:打开2个shell窗口,一个运行php emit_log.php,一个运行php receive_logs.php文章1和文章2都是使用了默认网关,然后消息直接发给了队列处理,接下来会引入交换机<?php/** * 生产者 * emit_log.php */require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAm原创 2020-09-18 14:18:54 · 140 阅读 · 0 评论 -
php操作rabbitmq(2)
官方示例地址使用方法:打开2个shell窗口,一个运行php new_task.php,一个运行php worker.php/** * 生产者 * new_task.php */require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;// 创建连接$connection = new AMQ原创 2020-09-18 10:54:16 · 107 阅读 · 0 评论 -
php操作rabbitmq(1)
官方示例地址ps: 这是都是使用php-cli运行的使用方法:打开2个shell窗口,一个运行php send.php,一个运行php receive.php<?php/** * 生产者 * send.php */require_once __DIR__ . '/vendor/autoload.php';use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;// 创建原创 2020-09-18 10:24:10 · 130 阅读 · 0 评论 -
ubuntu php+rabbitmq安装和使用
1. 安装rabbitmq安装erlang apt install -y erlang --fix-missing,虚拟机安装出现问题安装rabbitmq apt install -y rabbitmq-server,测试 rabbitmqctl status, 出现错误2. 安装php扩展包composer安装自行解决php扩展包安装和简单dome测试,php-amqplib包地址...原创 2020-09-17 16:06:12 · 243 阅读 · 1 评论 -
php-opcache-简单配置
1. opcache配置适用fpm推荐简单配置opcache.enable = 1opcache.enable_cli=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.save_comments = 1追加配置,更新opcache缓存opcache.validate_timestamps = 1opcache.revalid原创 2020-08-13 14:07:09 · 818 阅读 · 0 评论