
PHP
闲敲代码、落灯花
坚持写博客,一直在努力中
专注后端开发,喜欢Go和Python的PHP程序员,作为一个前端爱好者,对服务器运维比较有经验
同时也是一个个人站长:在网站:逐步前行STEP[https://www.hezehua.net] 记录我的工作与生活
展开
-
php 使用 array_reduce 实现多维数组分组(groupby)聚合
在处理关联数组时,经常需要对多维数组按指定字段分组聚合,下面封装了一个数组分组聚合方法:/** * 对数组进行分组聚合 * @param $array * @param $keys * @return $result */function array_group_by($array, $keys){ if(!is_array($keys) || count($keys) == 1) { $key = is_array($keys) ? array_first(原创 2020-07-29 16:04:12 · 9493 阅读 · 0 评论 -
laravel-admin 在指定的相册下添加照片
相册与照片是一对多的关系,有以下需求: 1、点开一条相册数据看到相册的照片列表 2、为相册添加照片时,表单中要看到相册的基本信息以下是实现步骤: 第一步:构建带参数路由:$router->resource('manage/{albumid}/photo',Manage\PhotoController::class);第二步:处理操作对应的函数: (1)列表查看publ...原创 2018-06-08 02:12:31 · 1712 阅读 · 0 评论 -
laravel-admin 在列表页添加自定义按钮
为了添加自定义按钮,按官方文档分4步走: 1、先定义工具类app/Admin/Extensions/Tools/MyButton.php:<?phpnamespace App\Admin\Extensions\Tools;use Encore\Admin\Admin;use Encore\Admin\Grid\Tools\AbstractTool;use Illumin...原创 2018-06-08 02:18:31 · 18547 阅读 · 2 评论 -
laravel 使用事件系统统计浏览量
最近有一个商城项目中有统计商品点击量和艺术家访问量的需求,但又不想改动太多原来的代码,而点击与访问这两个动作是有明确触发点的,正好可以用laravel中的事件系统来做,在点击和访问对应的函数中产生这俩事件,监视器获取到之后,再将记录保存到数据库中,并更新计数。1、在 app\Providers\EventServiceProvider中注册监听器: /** ...原创 2018-06-09 20:07:25 · 3053 阅读 · 0 评论 -
查询某个条件在一个区间内的数据
Order::whereBetween(‘created_at’,[‘2018-07-01’,’2018-07-02’])->get()原创 2018-07-02 12:13:26 · 5259 阅读 · 1 评论 -
PHP设计模式之工厂模式
工厂模式是一种隐藏类的实例化细节,并且对一系列类使用相同的实例化方式,可以很方便的扩展更多的实现同一个接口的类的创建对象的方式。 示例应用场景有: 1)在线支付 支付有多种方式,比如微信支付,支付宝支付,银联支付等,根据用户的选择而采用相应的支付方式; 2)访问量统计 在一个业务较复杂的项目中,用户对不同的对象进行访问,比如访问文章、访问作者、访问文章目录等,同样是访问记录,记录的信息却...原创 2018-08-04 02:22:43 · 250 阅读 · 0 评论 -
Closure 代表匿名函数的类
Closure 用于获取并使用匿名函数、将匿名函数绑定到具体的类,从而实现对匿名函数的更多控制。 举个例子:#不绑定,直接使用匿名函数$f = function ($var){ return $var;};function getClosure(Closure $f,$var){ return $f($var);}echo getClosure($f,'c...原创 2018-08-10 15:44:27 · 692 阅读 · 0 评论 -
PHP设计模式之单例模式
单例模式用于保证只有单个对象被创建 ,确保对象的唯一性。 示例应用有: 1)计算网站访问量时,可以使用单例模式创建计数器保证计算器的唯一性,并将计数器全局使用,这样即节约资源避免频繁创建销毁,又可以控制并发避免计算数据错误。 2)购物系统中的库存变更,使用单例模式创建库存对象,可以使库存变更在一个变量上,并用锁机制避免超卖。 单例模式原理: 创建一个唯一的对象,并全局使用它,设置锁机制保...原创 2018-08-07 01:42:46 · 221 阅读 · 0 评论 -
Composer自动加载(一)
Composer是PHP的基于项目的包管理工具,它本身集成一个autoloader,支持PSR-4,PSR-0,classmap,files autoloading.原创 2018-08-12 00:56:25 · 457 阅读 · 0 评论 -
PHP设计模式之建造者模式
建造者模式用于将复杂对象简单化,一个复杂的对象分解成多个更简单的对象,然后将简单对象组合起来就生成了复杂对象。 应用示例: 1)原创 2018-08-12 15:10:32 · 257 阅读 · 0 评论 -
使用supervisor使Laravel的queue保持后台常驻
我的个人博客:逐步前行STEP一、安装supervisor1、yum install python-setuptools2、easy_install supervisor原创 2018-08-24 13:08:13 · 3242 阅读 · 0 评论 -
Laravel中的env函数获取不到确定存在的配置
今天重启服务器后发现网站有个报错,一看是获取配置出错,于是去检查配置,发现没问题,配置是正确的,于是想着换成getenv函数试试,还是不行,执行一遍composer install、composer update、composer dump-autoload还是无效,然后想起之前env配置不生效时使用的清除config缓存命令:php artisan config:clear,终于配置又生效了。...原创 2018-10-12 22:05:02 · 5547 阅读 · 0 评论 -
Dockerfile 中 配置安装 php 扩展
以下配置实现了 在docker环境中安装scwl中文分词的php扩展: # scwlRUN curl 'http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2' -o scws-1.2.3.tar.bz2 \ && tar -xjf scws-1.2.3.tar.bz2 \ && r...原创 2019-08-06 13:31:11 · 1579 阅读 · 0 评论 -
laravel-admin grid中使用switch操作一对一关联属性(源码探究到功能实现)
项目中有一个商品表(production) ,有一个库存表(repertory),两者一对一关系,production有发布字段(release),需求是在repertory的grid中,有一个switch开关,用于发布production。 如果直接使用 grid−&amp;gt;column(′production.release′)−&amp;gt;switch(grid−&amp;gt;column(′...原创 2018-06-12 16:33:57 · 6364 阅读 · 0 评论 -
Laravel Eloquent关联模型查询设置查询条件与指定字段
1、直接获取关联模型:$user-&amp;amp;gt;posts()-&amp;amp;gt;where('created_at‘,'&amp;amp;gt;',date('Y-m-d H:i:s',time()))-&amp;amp;gt;orderBy('collection')-&amp;amp;gt;get(['id','title','content']);2、渴求式加载关联模型:$users-lo原创 2018-05-13 17:57:48 · 17749 阅读 · 0 评论 -
php脚本定时更新商品列表
电商项目中为了提高抗并发能力,需要对商品列表做缓存,以下是更新缓存用的脚本://PRODUCTION_为缓存商品列表的临时key//PRODUCTION为缓存商品列表key$con = mysqli_connect($db_config['host'],$db_config['user'],$db_config['passwd'],$db_config['database']);$r...原创 2018-04-22 16:51:40 · 607 阅读 · 0 评论 -
PHPmyadmin 和 MySQL 的配置笔记
配置MySQL: (直接下载msi文件或者exe文件安装的可直接看第 3 步) 基础配置: 1. 将安装包解压到根目录,如E:\mysql; 2. 进入mysql文件夹找到my-default.ini文件,并将文件名改为my.ini; 3.用记事本打开my.ini,找到如图所示项: 将basedir的值改为mysql文件夹的路原创 2015-11-08 04:55:37 · 554 阅读 · 0 评论 -
编译安装LNMP全程实录
此次是在CentOs 7.4上进行安装配置,先把编译环境配置好:yum -y install gcc automake autoconf libtool make yum install gcc gcc-c++准备一些软件的安装包: 安装包 地址 用途 php-7.1.6.tar.bz2 http://cn2.php.net/distribution...原创 2018-02-03 02:10:35 · 323 阅读 · 0 评论 -
面试小结——01
1、相关知识点:1、文件基本操作 (1)、file_exists —检测文件是否存在 (2)basename — 返回路径中的文件名部分 (3)dirname — 返回路径中的目录部分 (4)pathinfo — 返回文件路径的信息 (5)fopen — 打开文件或者 UR (6)fgets — 从文件指针中读取一行 (7)getFileSize — 获取文件大小 (8)f...原创 2018-02-09 01:12:09 · 368 阅读 · 0 评论 -
如何安装新的PHP扩展模块
一、phpize方式(该方法用于安装php源码ext目录中没有的扩展) 1、下载源码 2、解压并进入扩展目录 3、执行phpize 4、执行./configure 5、make && make install 6、在php.ini 文件中添加 extension=xxx.so 7、重启fpm二、重新编译(该方法用于安装php自带的扩展) 在编译时用参数添...原创 2018-02-11 09:36:02 · 450 阅读 · 0 评论 -
PDO连接MySql数据库
PDO:PHP数据对象,是一个PHP扩展,定义了了访问数据库的统一接口。 PDO提供了一个数据库访问抽象层,通过PDO可以用相同的函数访问不同的数据库。 PDO连接数据库的实例:<?php $dbms='mysql'; //数据库类型 $host='localhost'; //数据库主机名 $dbName='test'; //使用的数据库 ...原创 2018-02-13 02:04:16 · 800 阅读 · 0 评论 -
爬虫302
在多次爬取数据数据后,会出现302重定向的问题,解决办法是增加一个curl参数配置:CURLOPT_USERAGENT以此设置用户代理,模拟浏览器访问。原创 2018-02-14 19:25:21 · 2352 阅读 · 1 评论 -
PHP设置时区
date_default_timezone_set('PRC'); //设置中国时区原创 2018-02-14 19:26:59 · 262 阅读 · 0 评论 -
C与PHP的联系与区别
联系: 1、PHP是C语言实现的一个应用软件,PHP的程序执行,最终也是调用C函数,很多时候,一些要优化性能的工作可以通过对PHP进行C扩展来实现。区别: 0、PHP是面向对象语言,C是面向过程的函数过程式语言。 1、PHP是弱类型语言,使用变量时不需要申明类型,而且各种类型之间容易进行转换,而C语言是强类型语言,必须申明变量类型,而且不可以随意在不同类型之间转换。 2、PHP中的数组...原创 2018-02-28 10:38:45 · 955 阅读 · 0 评论 -
一个在PDO数据绑定上踩的坑
不经常用PDO,一直不知道数据绑定的时候的一个细节——不可使用同一个变量名为不同的符号进行数据绑定。 因为这样的话会导致在执行execute()时,不同符号都绑定了同一个值——最后一个赋予这个变量名的值。 比如:$letters = array('a','b','c');foreach($letters as $k=>$v){ if($pre->bindParam("...原创 2018-02-22 17:25:22 · 517 阅读 · 0 评论 -
Laravel初探——安装
安装Composer1、curl -sS https://getcomposer.org/installer | php 2、mv composer.phar /usr/local/bin/composer 3、composer install安装Laravel1、composer global require “laravel/installer” 2、通过find / -...原创 2018-03-05 20:37:49 · 227 阅读 · 0 评论 -
laravel 关联关系之多态关联
多态关联文章、作者与收藏的关联关系:收藏既可以是对文章的收藏,也可以是对作者的收藏 表:artist: 字段:id name 表:article: 字段:id title content 表:favorites: 字段:id favorite_type favorite_idclass favorites extents model{...... public fu...原创 2018-04-17 02:07:36 · 1874 阅读 · 0 评论 -
木桶布局 原理与实现
项目中有一些图片布局需要按木桶布局排列,而前端工程师是个新手,不会用JS实现,只能在后端处理,直接返回处理好的图片尺寸,达到木桶布局的效果。 木桶布局就是将图片按行、等高排列,并且保证每一行图片排列正好占满,边距相等,效果如下: 实现木桶布局的图片尺寸处理主要有以下步骤: 1、设置行高、行宽、边距 2、获取图片高、宽 3、将每个图片高度设置为行高,并等比例缩放图片宽度 4、遍历图片...原创 2018-04-22 01:51:01 · 1620 阅读 · 0 评论 -
Ajax 和 PHP 实现验证码的实时验证
PHP的图像处理功能强大,做一张验证码图片也是非常简单的,但是,在实现实时验证时,确遇到了一个难题: 我用nat123对我的电脑上的网站进行端口映射,实现了在外网访问,本来是采用cookie的方式用js对验证码进行验证,但是经检验发现nat123虽然使我的网站可以通过一个自定义的网址进行访问,但是产生验证码的php文件在网络上的位置竟然和其它页面不在一个域,经查询得知,因为输出图片的缘故,被作为缓原创 2015-11-08 06:37:36 · 2194 阅读 · 0 评论