
PHP
明日晴空
加油啦~
展开
-
MineAdmin Swagger结合phpstorm实现快速客户端http调试
MineAdmin\OpenApi\Swagger\phpstorm\HTTP调试原创 2022-05-02 13:53:35 · 1721 阅读 · 1 评论 -
常用日期时间处理类封装DateTime(基于Carbon)
<?phpnamespace Waoo\Helper;use Carbon\Carbon;class DateTime{ /******************************日******************************/ /** * 今日Y-m-d * @return string */ public static function nowDate(): string { retu.原创 2022-04-26 10:21:11 · 834 阅读 · 1 评论 -
php 新建目录底下文件不执行原因
看一下compose.json文件,找到autoload,需要为新建的目录配置自动加载配置完成后,执行composer install然后再允许即可原创 2022-02-22 18:21:22 · 290 阅读 · 0 评论 -
guzzle发起请求设置cookie失效
踩了个坑,分享一下,设置cookie时绑定的域名,不需要http://或https://// 这里的index.baidu.com只需要域名就好$cookies = CookieJar::fromArray($this->cookie, 'index.baidu.com'); $client = $this->clientFactory->create($this->options);$response = $client->request('GET', 'i.原创 2021-12-27 15:31:39 · 601 阅读 · 0 评论 -
docker安装php拓展
此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。Docker 中的PHP容器安装扩展的方式有通过pecl方式安装 通过php 容器中自带的几个特殊命令来安装,这些特殊命令可以在Dockerfile中的RUN命令中进行使用。这里,我们主要讨论的是第二种方案,如何通过PHP容器中的几个特殊命令来安装PHP扩展P原创 2021-11-30 16:42:02 · 2756 阅读 · 0 评论 -
docker-compose 安装多版本php
对很多程序员来说,项目累积多了,每个项目需要不同版本的开发环境是非常正常的。此篇讲解使用docker-compose 安装多个版本的php环境,docker-compose 基础知识需自行了解。 docker-compose.yml 文件配置。 version: '3.3'services: php72-fpm: build: ./php72 // php72版本 (复制请把注释去掉) ports: - "9003:9000" /...原创 2021-08-25 10:03:26 · 1476 阅读 · 0 评论 -
设计模式 -策略模式(九)
一、什么是策略模式将一组特定的业务行为或算法封装成类,可以在运行时更改,以适应某些特定上下文环境,解决各种if else判断,这种模式就是策略模式;注:如果策略超过4个,考虑用混合模式;栗子:旅行出游,选择交通工具,每种交通工具都是一种策略二、策略模式作用算法可以自由切换,避免使用多重if…else 条件盘点,拓展性好;三、具体实现// 交通策略接口interface TrafficStrategy{ public function speed(); public function c原创 2021-05-18 09:13:37 · 187 阅读 · 0 评论 -
设计模式 -迭代器模式(八)
一、什么是迭代器模式在不需要了解内部实现的前提下,遍历一个聚合对象内部元素二、 迭代器作用相比传统的编程模式,迭代器可以隐藏遍历元素的所需操作三、具体实现class AllUser implements \Iterator // 继承框架自带迭代器基类{ protected $index = 0; protected $data = []; protected $ids; public function __construct() {原创 2021-05-14 09:36:53 · 200 阅读 · 0 评论 -
设计模式 -观察者模式(七)
一、什么是观察者模式当一个对象状态发生改变时,依赖它的对象会全部收到通知,并自动更新二、观察者模式作用实现低耦合,非侵入式的通知与更新机制,能更好的维护代码三、具体实现// 基类abstract class EventGenerator{ private $observers = []; public function addObserver(Observer $observer) // 添加观察者 { $this->observers[] = $observer }原创 2021-05-13 17:35:10 · 139 阅读 · 0 评论 -
设计模式 - 代理模式(六)
一、什么是代理模式客户端对目标的操作,委派给代理对象(proxy)处理,代理对象相当于一个中介;二、代理模式作用隐藏目标对象,不对外暴露,解耦代码业务三、具体实现interface UserProxy{ public function getUserName($id); public function setUserName($id, $name);}class Proxy implements UserProxy{ public function getUserName($id)原创 2021-05-13 16:56:57 · 131 阅读 · 0 评论 -
设计模式 - 装饰器模式(五)
一、什么是装饰器模式装饰器模式:创建装饰者对象,动态添加或修改类的方法,灵活拓展功能二、装饰器作用一个类,提供了个方法,如果要对这个方法,修改或添加的功能,传统的编程模式,需要一个子类继承它,并重新实现。 使用装饰器,可以直接在运行时添加一个装饰器对象即可,实现最大的灵活性。三、实现案例class MilkTea{ protected $decorators = array(); // 装饰者数组 public function drink() { $this->before原创 2021-05-12 17:56:52 · 209 阅读 · 0 评论 -
设计模式 -原型模式(三)
一、什么是原型模式原型模式简单理解:先创建好一个原型对象,然后通过clone原型对象,来创建新的对象。二、使用原型模式的好处原型模式适用于大对象的创建,比如一个对象创建的时候需要初始化很多东西,产生大的开销,这时候用原型模式,就可以避免类创建时重复初始化的开销。三、具体实现1、比如有以下A对象:class A{ public $color; public $height; public $width; // 开销比较大的初始化 public function init(s原创 2021-05-11 18:04:21 · 221 阅读 · 0 评论 -
php版本升级,composer install / update 失败
composer install / update 出现以下类似问题:Problem 1 - bacon/bacon-qr-code 2.0.0 requires php ^7.1 -> your php version (8.0.3) does not satisfy that requirement. - simplesoftwareio/simple-qrcode 3.0.0 requires bacon/bacon-qr-code 2.0.0 -> satisfia...原创 2021-03-17 14:40:35 · 1582 阅读 · 0 评论 -
laravel 返回419错误解决(CSRF)
1.关闭VerifyCsrfToken中间件验证进入项目目录 app/Http/Kernel.php文件,注释下图这行代码2、在VerifyCsrfToken 中间件,加入白名单原创 2021-03-04 09:48:59 · 2567 阅读 · 1 评论 -
mysql存储JSON格式,如果有中文会显示unicode编码
当我们用php的json_encode方法,在mysql存储JSON格式数据的时候,经常发现在 数据库可视化工具上看,中文会被转为unicode编码存起来,非常不利于我们查看。怎么正常显示呢?json_encode方法有自带提供第二个参数,直接以下使用即可json_encode($field,JSON_UNESCAPED_UNICODE)...原创 2020-02-12 01:17:23 · 1951 阅读 · 0 评论 -
PHP 快速获取客户端IP地址及ip归属地
一、获取客户端ip地址function getip(){ if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORW...原创 2019-12-23 10:56:02 · 863 阅读 · 0 评论 -
thinkphp6 视图输出字符串替换 view_replace_str,__PUBLIC__ 无效
踩了个坑,thinkphp5.0 及之前版本,都是在配置文件配置 'view_replace_str' => [ '__PUBLIC__' => '/', // 路径自己定义 '__STATIC__' => '/static' ],但,thinkphp5.1及之后版本,都是使用tpl_replace_s...原创 2019-12-16 16:39:37 · 3445 阅读 · 0 评论 -
thinkphp6 使用token助手函数 报错Call to a member function set() on null
原因**由于助手函数调用了session,但是我们并没有启用,所以报错了。**解决**在全局中间件middleware.php文件,配置**'think\middleware\SessionInit'**如果是多应用模式,可以在应用里的middleware.php文件进行配置**...原创 2019-12-04 22:54:01 · 2898 阅读 · 0 评论 -
Thinkphp6 中的跨域请求设置 AllowCrossDomain中间件
tp6已经自己封装好了跨域请求的内置中间件,自己都快自己封装好了才发现。使用;在 app\middleware.php 文件中,引入内置中间件即可\think\middleware\AllowCrossDomain::class...原创 2019-11-29 09:37:28 · 12490 阅读 · 21 评论 -
thinkphp 设置缓存 总是返回false
1、runtime 文件夹的权限不够;2、写法出错;原创 2019-10-29 09:04:59 · 856 阅读 · 0 评论 -
tp5.1 中间件
一、中间件是什么?中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理。二、中间件有什么作用?中间件可以实现什么功能,例如权限验证,访问记录,重定向等等。三、定义中间件可以通过命令行指令快速生成中间件php think make:middleware Check复制这个指令会application/http/middleware目录下面生成一个Ch...原创 2019-10-29 09:06:29 · 1729 阅读 · 0 评论 -
tp5.1 Facade
门面(Facade)门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade类。系统已经为大部分核心类库定义了Facade,所以你可以通过Facade来访问这些系统类,当然也可以为你的应用类库添加静态代理。说的直白一点,Facade功能可以让类无需实例化而直接进行静态方式调用。下面是一个...原创 2019-10-18 10:42:19 · 416 阅读 · 0 评论 -
tp5.1 系统常量
5.1版本取消了所有的系统常量,原来的系统路径变量改为使用Env类获取(需要引入think\facade\Env):例如:// 获取应用目录(不区分大小写)echo Env::get('app_path');// 或者echo Env::get('APP_PATH');支持获取的系统路径变量包括:系统路径 Env参数名称 应用根目录 root_path ...原创 2019-10-18 10:01:07 · 2677 阅读 · 0 评论 -
tp5.1 自动生成目录结构
快速生成模块生成一个test模块的指令如下:>php think build --module test表示自动生成test模块,自动生成的模块目录包含了config、controller、model和view目录以及common.php公共文件。批量生成模块如果需要批量生成多个模块的目录和文件,需要定义规则文件build.php并放入应用目录下面。默认的框架的根...原创 2019-10-17 15:52:41 · 1064 阅读 · 0 评论 -
出现 mkdir() Permission denied 问题解决
正常我们在写项目的时候,本地可以可以使用,部署到服务器为什么就出现这个错误了呢?因为我们服务器使用的是Linux系统,默认的目录权限没有全部开启的,造成执行创建文件的时候报错;所以解决mkdir() premission denied 的问题最直接的方式,把runtime权限放开,让所有用户都可以创建它。chmod -R 777 runtime(开放权限的目录) 以下是几个经...原创 2018-12-14 13:40:28 · 35989 阅读 · 0 评论 -
phpstorm 去除参数提示 parameter name hints
phpstorm默认是开启参数提示的,如下图,感觉看着比较碍眼,不利于读代码,所以我们就把它去掉吧!setting > Editor > General > Appearance > Show parameter name hits 去掉前面的勾就行了哦,如下图...原创 2018-12-19 20:41:53 · 3655 阅读 · 0 评论 -
thinkphp5详细使用阿里云短信最新版(原大鱼)教程!
先说一下吧,这篇文章主要教大家如何使用tp5来使用阿里短信平台最新版2.0sdk,也就是所谓的前阿里大鱼。但是高手略过啊,只针对新手,如果大家发现有什么问题,欢迎留言指出,我会更正!首先我们下载官方完整包的SDK:[url]https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55451.6.580.3rgXTq[/ur...转载 2018-12-03 17:07:04 · 1590 阅读 · 1 评论 -
thinkphp5 模型时间戳自动写入 不生效原因
模型时间戳1、模型层代码如下:<?phpnamespace app\admin\model;use think\Model;class User extends Model{ protected $autoWriteTimestamp = true; //开启自动写入时间戳 protected $createTime = false; ...原创 2018-11-29 09:55:47 · 5325 阅读 · 2 评论 -
thinkphp5 软删除
一、实现软删除1、数据表增加一个字段delete_time 数据类型int,默认值NULL2、模型层引入 softDelete 类;3、此时你对数据库的删除操作会在delete_time字段添加时间戳,而不是将数据删除;(delete_time字段可以自定义名称,如上图) 4、注意,使用db()助手函数或Db:name()方法是会获取到软删除的数据 注意:使用软删除...原创 2018-11-29 09:54:24 · 1455 阅读 · 0 评论 -
thinkphp5 模型获取器和修改器
一、模型获取器:控制器代码:$article=new Article();$res = $article->get(34);echo $res->see_num; 模型层代码:模型层方法命名 get+字段名驼峰+Attr ()public function getSeeNumAttr($val){switch ($val){case 0:...原创 2018-11-29 09:52:00 · 490 阅读 · 0 评论 -
thinkphp5 数据库聚合操作
Article 是模型的名1、统计数据条数: Article::where("id",">",5) -> count();2、获取最大值: Article::where("id",">",5) -> max('num');3、获取最小值: Article::where("id",">",5) ->原创 2018-11-29 09:49:48 · 447 阅读 · 0 评论 -
MySql按中文姓名排序
so easy,使用下面语句即可:select * from `table_name` order by convert(`name` using gbk) asc 记得改表名和字段名原创 2019-01-03 11:21:46 · 6134 阅读 · 4 评论 -
php获取本年、本月、本周时间戳和日期格式
时间戳格式//获取今日开始时间戳和结束时间戳 $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; //获取昨日起始时间戳和结束时间戳 $beginYesterday=mktime(0,0,0,da...原创 2019-03-05 10:10:07 · 351 阅读 · 0 评论 -
PHP 语言级性能优化
PHP 语言级性能优化 -- 可使用ab压力测试工具进行测试;1、多使用系统内置函数;2、系统内置函数之间的性能也不一样,选择较好的函数;如 isset 与 array_key_exist , isset 耗时更短;3、尽量少用php魔法函数,因为魔法函数性能不佳;4、禁用错误抑制符 @ ,会产生额外开销;正常使用try throw 抛出错误 ;5、合理使用内存,用unset(...原创 2019-07-02 10:22:37 · 252 阅读 · 0 评论 -
常用PHP数组两层循环优化
我们经常都会有这样的需求,两个数组中某个字段关联,根据这个字段合并为一个数组,如下例子:// 数组a的id 与 数组b的pid 关联$a = [['id'=>1,'name'=>'a1'],['id'=>2,'name'=>'a2'],['id'=>3,'name'=>'a3']];$b = [['pid'=>1,'money'=>100...原创 2019-07-03 22:27:54 · 1185 阅读 · 2 评论 -
设计模式 - 工厂模式(一)
从字面上理解,工厂模式,就是工厂中,用模具去生产某种产品,当我们改变这个模具,接下来生产的产品也就跟着改变了; 其实工厂模式,就是某种封装,我们来看个工厂模式的demo:1. Test1.php // 新建Test1类文件<?phpclass Test1{ public function add(){ return '我是Tes...原创 2019-07-15 17:19:58 · 168 阅读 · 0 评论 -
设计模式 - 单例模式(二)
一、单例模式是什么?有什么作用? 单例模式就是让类 只实例化(new)一次,使用单例模式, 则可以避免大量的new 操作消耗的资源。二、实现单例模式1)三私一公(原理) ①、私有静态属性,又来储存生成的唯一对象 ②、私有构造函数 ③、私有克隆函数,防止克隆——clone ④、公共静态方法,用来访问静态属性储存的对象,如果...原创 2019-07-16 11:35:57 · 195 阅读 · 0 评论 -
设计模式 - 适配器模式 (四)
一、什么是适配器模式(Adapter Pattern)? 适配器模式,就是将不同的api接口,统一成一致的;实际应用举例,数据库操作有mysql、mysqli、pdo三种,但是它们的连接和操作方法是不一样的,我们可以用适配器将它们的操作接口封装成一致的。 类似场景还有cache适配器,将memcache、redis、file、apc等不同缓存函数适配一致; 适...原创 2019-07-23 17:18:59 · 348 阅读 · 0 评论 -
php excel导出下载出错,错误码:ERR_INVALID_RESPONSE(网页暂时无法连接,或者它已永久性地移动到了新网址)
原因1:服务器php版本过高;解决方法:请打开PHPExcel\Calculation\Functions.php文件,删除掉在581行附近的break即可;原因2:缺少zip的扩展;解决方法:安装zip拓展;...原创 2019-08-21 16:39:55 · 16161 阅读 · 0 评论 -
PHP设计模式(注册模式)
一、什么是注册模式? 注册模式也称注册树或注册器模式,将类对象注册到全局树(注册类)上,那么他就可以被任意地方访问。二、为什么要用注册模式? 单例模式解决的是如何在整个项目中创建唯一对象实例的问题,工厂模式解决的是如何不通过new建立实例对象的方法。 那么注册树模式想解决什么问题呢? 在考虑这个问题前,我们还是有必要考虑下前两种模式目前面临的局限。 首先,...原创 2019-07-20 14:59:58 · 308 阅读 · 0 评论