php
渡目成书
我能像你们一样潇洒就好了
展开
-
PHP+redis实现分布式锁
什么是分布式锁定义:在分布式环境下,一个共享的可见的公共资源,各个线程通过对这个公共资源的抢占,能够使得一个代码块在同一时间只能被一个机器的一个线程执行,那这个公共资源就是分布式锁,或者说这整个机制就是分布式锁。或者从使用场景定义:分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性分布式锁实现方式锁的实现方式有多种,只要能满足所有线程都能看得到这个锁标记即可。常见的方式是使用数据库、缓存或者zookeeper来实现分布式锁,除了这些,其实一个网络原创 2022-04-01 13:27:01 · 3012 阅读 · 1 评论 -
PHP匿名函数,回调函数,闭包的使用
自定义函数基本大部分的编程语言都有函数,函数也是编程语言的一个基础单元了,php中的自定义函数可分为无参函数,有参函数,无返回值,有返回值无参函数见名知意即没有参数的函数function aa(){ echo '无参函数';}有参函数function bb($a,$b){ echo $a+$b;}有返回值函数function cc($a,$b){ return $a+$b;}匿名函数匿名函数类似自定义函数,缺少函数名,可作为参原创 2021-11-18 14:45:53 · 335 阅读 · 0 评论 -
使用Guzzle拓展包请求接口失败重试
问题在接口不稳定的情况下,可能出现访问接口错误情况,一般又在第二次请求又会成功。这种时候需要我们完成一个重试的策略去进行规避解决:使用guzzle中间的重试去解决<?phprequire './vendor/autoload.php';class Retry{ const MAX_RETRIES = 2; public $client; public function __construct() { $handlerStack = \G.原创 2021-11-17 15:14:23 · 1956 阅读 · 0 评论 -
guzzle 使用 json方式请求接口
在调用接口的时候有些接口要求请求方式为json方式,在guzzle该如何去使用以数组的方式请求,加上json键$client->request('POST', 'http://10.1.11.207:8080/api/v2/otherin/add', [ 'json' => [ 'otherin' => [ 'warehousecode' => '02', ..原创 2021-07-20 16:40:16 · 2504 阅读 · 0 评论 -
Class UpdateHelper\ComposerPlugin contains 2 abstract methods and must 。。。
问题在composer报出的问题Class UpdateHelper\ComposerPlugin contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Composer\Plugin\PluginInterface::deactivate, Composer\Plugin\PluginInterface::uninstall) in D:\wamp.原创 2021-07-20 15:57:28 · 4221 阅读 · 0 评论 -
种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。示例 1:输入:flowerbed = [1,0,0,0,1], n = 1输出:true示例 2:输入:flowerbed = [1,0,0,0,1],原创 2021-01-05 15:34:58 · 274 阅读 · 0 评论 -
1588. 所有奇数长度子数组的和(php和go)
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。子数组 定义为原数组中的一个连续子序列。请你返回 arr 中 所有奇数长度子数组的和 。示例输入:arr = [1,4,2,5,3]输出:58解释:所有奇数长度子数组和它们的和为:[1] = 1[4] = 4[2] = 2[5] = 5[3] = 3[1,4,2] = 7[4,2,5] = 11[2,5,3] = 10[1,4,2,5,3] = 15我们将所有值求和得到 1 + 4 + 2..原创 2020-12-31 17:02:55 · 153 阅读 · 0 评论 -
php 表单提交post数据中括号[]解析成数组不完整
问题:表单提交name中有中括号,name中的字符串提交会呗自动解析,导致数据出问题解决:在value中重复字段name取value值如图,以第一个图是浏览器提交的数据,第二个图是后台原样返回,当前端提交的字段存在中括号的时候,后台接受到数据会自动解析了中括号变成了数组,导致我们获取字段名错误原本是去字段名到后台进行处理,现在去字段名已经失效,但是在value显示还是正常的。可以取value数据进行代替字段名...原创 2020-12-25 09:54:47 · 782 阅读 · 0 评论 -
php workerman在线同步点歌台,支持在线聊天,与点歌
Music使用PHP workerman开发的在线同步点歌台,支持在线聊天和自由点歌项目地址在线同步点歌台使用控制器-》方法的形式去处理websocket客户端消息使用这里没有去使用redis,使用redis效果应该更好,不想麻烦就直接使用mysql数据库去处理了导入song.sql,Song\Config\Db.php中进行配置数据库在windows下直接双击start_for_win.bat在linux下php start.php start或守护进程php start.原创 2020-12-03 09:27:19 · 376 阅读 · 0 评论 -
php获取mp3音频时间
需求获取音频的时间加载拓展包composer require james-heinrich/getid3使用<?phprequire "./vendor/autoload.php";$obj = new getID3();$tt = $obj->analyze('fade.mp3');echo $tt['playtime_seconds']."<br>";//秒,浮点echo $tt['playtime_string'];//分,秒,秒..原创 2020-11-27 16:40:31 · 233 阅读 · 0 评论 -
laravel php 并发插入数据重复问题
场景:在并发插入更新的情况下,数据库会出现重复数据的情况出现下面是一段laravel的示例代码主要逻辑是判断tt,yy的va字段为空才会执行更新va字段和创建数据,以下为正确示例在进行并发100测试的时候,出现了多条数据,过滤va为空的条件失效,同时多条请求拿到了VA为空,都进行后续搞作我们如何去解决这个问题,尝试使用laravel自带的悲观锁去处理,但结果还是会出现相同问题尝试引入redis去处理在redis中setnx设置值当key存在时候返回0,不存在时候设置值返回1,.原创 2020-11-20 09:37:25 · 2908 阅读 · 0 评论 -
php imap读取邮箱邮件信息
在需求中需要能够监控邮箱的邮件,要满足这个功能得能够读取邮件的内容才行这里使用一个我自己开发的一个基于imap拓展的composer来进行完成,目前无法读取附件,一般监控也是监控文字,算是满足基本需求安装拓展composer require superkingm/mail使用,我这里以在laravel框架中使用为例子<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use MailBox\Ma.原创 2020-11-13 14:18:48 · 2140 阅读 · 4 评论 -
php二维数组插入矩形方块模拟货架
今天在论坛看到一个求助问题,利用二维数组模拟货架,往货架上面放矩形,觉得这个需求有点意思,就自己琢磨了下我的思路是将二维数据想象成网格,将要放入矩形放进去,遍历网格的每个小格子,作为矩形的左上格,推算出这个矩形所占的所有网格坐标,再来辨别所在小格子是否都是空的<?php$arrs = [ 0 => [1, 0, 1, 1, 0, 0, 1, 1], 1 => [1, 1, 1, 1, 0, 1, 1, 1], 2 .原创 2020-10-23 16:10:59 · 235 阅读 · 0 评论 -
php文件配置数组数据修改替换
系统配置数据在php文件中需要能够动态配置一般情况下在开发系统的时候会把固定数据配置成文件进行统一调用,如第三方接口的秘钥,配置成文件,调用进行统一调用,在修改配置时候全局都能生效。但是这种修改一般是人手动在文件里面修改。作为一个系统,我们可以做得更为方便,可以在web页面进行文件的修改。这里以百度文字识别配置在laravel系统中为例子在laravel中一般都会把配置写进config文件下配置文件中,然后用config()函数进行调用例如这里baidu_ocr.php,配置了文件,我们希望在we.原创 2020-10-23 10:35:38 · 587 阅读 · 0 评论 -
php运用C拓展excel高效大数据量导出
导出excel功能在一些需要报表的系统中是非常常见的功能,在一般数据量较少的情况下phpexcel能够完美解决我们的问题,并且能够对表格做很多例如颜色,字体,单元格等处理但是在数据量大的情况下,phpexcel的性能下降异常厉害,内存需求很大,耗时很长,基本无法使用,前面使用fputcsv函数进行导出处理解决了大数据量导出的问题,但是无法对数据进行更多的处理今天发现了一个C拓展的excel处理包,能够高性能还可以处理表格数据,就来使用一下首先安装 拓展,详细安装(略)现在就在l..原创 2020-09-16 15:44:41 · 454 阅读 · 1 评论 -
php laravel redis数据数组进行手动分页
在redis中我们使用有序集合一般是利用score进行数据的筛选,一般score存放时间戳,用来进行时间段筛选问题:利用ZRANGEBYSCORE key min max进行筛选在数据量非常大的情况下,全部查询出来,放到页面渲染导致页面非常的慢,需要进行分页处理ZCARD key获取有序集合的成员数,ZRANGE key start stop [WITHSCORES]通过索引进行查询的方式,如不通过时间去筛选,直接用索引进行分页是最好的,功能中需要时间筛选,这里只能对查询出来的数据进行手动切割分页将.原创 2020-09-10 16:52:20 · 580 阅读 · 0 评论 -
php RSA非对称加密秘钥生成
非对称加密RSA在项目中比较常用,需要公钥和私钥,这里就进行一对钥匙的生成RSA公钥私钥生成载入拓展包composer require phpseclib/phpseclib项目引入<?phprequire __DIR__ . '/vendor/autoload.php';use phpseclib\Crypt\RSA;$rsa = new RSA();extract($rsa->createKey()); echo $privatekey;echo $pu.原创 2020-08-17 15:10:46 · 678 阅读 · 0 评论 -
laravel php页面渲染几个一组
在页面渲染中经常的样式是,一行为几个div,查询数据是一条一条,不能满足页面显示需要进行处理laravel中@foreach ($products->chunk(3) as $chunk) <div class="row"> @foreach ($chunk as $product) <div class="col-xs-4">{{ $product->name }}</div> @end.原创 2020-07-27 16:12:12 · 286 阅读 · 0 评论 -
composer拓展包开发(二)自动更新与版本控制
在上一篇文章中写了composer拓展包的开发,但是在实际情况中我们的仓库的代码是变动的,我们希望提交的拓展包也能同步更新拓展包的更新同步在composer中我们提交了仓库地址,加入了composer的仓库,但是当我们更新了代码,composer仓库是不会同步更新,这个时候我们需要设置composer仓库的钩子,自动检测github仓库的更新,即使用github进行授权,这里我已经授权,这样我们的composer也进行了同步检测一下我们在拓展包中新增sub方法<?phpnamesp.原创 2020-07-17 17:23:04 · 673 阅读 · 0 评论 -
composer拓展包开发
composer的出现大大提升了开发的效率,当我们去开发什么功能的时候,大多时候我们都可以在composer仓库中找到相对应的轮子,来使用。如果自己也想写轮子给广大的php开发者使用,那么就该学习一下composer包如何开发了composer项目初始化这里我创建的文件夹 mathcomposer initPackage name (<vendor>/<name>) [chaow/math]: smallk/math //包名 格式必须Description []:原创 2020-07-17 16:23:40 · 2110 阅读 · 0 评论 -
php人物图像动漫化
在抖音里面最近人物动漫化的特效比较火,发现百度的图片开发接口上更新了人物动漫这里我们就来使用一下看看效果需要先去百度的开发平台开通 图像增强与特效 的应用获取相关的key鉴权认证向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:grant_type: 必须参数,固定为client_credentials;client_id: 必须参数,应用的API Key;client_secret:..原创 2020-07-16 15:11:10 · 976 阅读 · 0 评论 -
php 去掉excel导入字符串所有空格
在处理请求的时候需要对空格进行处理在一些场景,比如对比字符串的时候,需要将空格去掉再进行对比去掉excel导入数据的空格//删除空格function trimall($str){ $oldchar = array(" ", " ", "\t", "\n", "\r"); $newchar = array("", "", "", "", ""); $str = str_replace($oldchar,$newchar,$str); $str = preg_re.原创 2020-06-23 16:42:30 · 947 阅读 · 0 评论 -
centos lnmp php安装ldap拓展
编译安装对LDAP进行检查安装检查:yum list openldapyum list openldap-devel安装 :yum install openldapyum install openldap-devel一定要执行这条命令:cp -frp /usr/lib64/libldap* /usr/lib/ 进入php 的拓展安装目录cd /home/lnmp1.3-full/php-5.6.22/ext/ldap不知道安装目录可以进行查找find -name "ln.原创 2020-06-23 09:23:45 · 186 阅读 · 0 评论 -
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL
出现这种一般是是访问https的地址,ssl验证访问导致的$arrContextOptions = [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, ]];$response = file_get_contents($voucherImageBase64, false, stream_context_create($arrContextOptions).原创 2020-06-23 08:51:33 · 11475 阅读 · 0 评论 -
php 二维数组比较通过某字段
场景,需要将两个二维数组进行比较,找出其中相同的元素大体思路就是,先在两个二维数组中找出相同主键相同的元素,再进行比较在php文档中的方法一般都是针对一维数组,这里我们只能手动去处理二维数组第一想法是循环去处理两个数组,但是两个数组循环起来有点不好写这里使用将二维数组中的标识字段降成一维数组,再对一维数进行处理<?phpfunction array_compare($array_1,$array_2){ $array_1 =[ ['one'=&..原创 2020-06-18 14:27:21 · 1108 阅读 · 0 评论 -
php laravel中请求第三方接口数据
场景,很多时候项目中会使用第三方接口,虽然有curl方式已经很强大,但是对于我们自己去一个个编写还是非常大的难度的这里使用GuzzleHttp插件进行接口请求安装composer require guzzlehttp/guzzle我们以一个登陆的post的接口为例: $client =new \GuzzleHttp\Client(); $res = $client->request('POST','XXXXX',['form_params.原创 2020-06-16 14:41:59 · 3117 阅读 · 0 评论 -
laravel php 默认图片下载
一般情况下a标签的图片地址会默认在浏览器中打开,我们需要点击直接下载图片,不是打开图片我们需要使用流的方式进行访问下载 //获取要下载的文件名// $filename = $id; $filename = 'img/123.jpg';//文件路径地址 //设置头信息 header('Content-Disposition:attachment;filename=' . basename($filename)); header('Content-Length:' . filesize($fi.原创 2020-06-10 16:16:05 · 400 阅读 · 0 评论 -
php redis订阅发布
发布端publish.php<?php$channelName = "testPubSub";//频道1$channelName2 = "testPubSub2";//频道2try { $redis = new Redis(); $redis->connect('127.0.0.1', 6379); for ($i=0;$i<5;$i++){ $data = array('key' => 'key'.$i, 'data' =>原创 2020-05-21 13:56:55 · 160 阅读 · 0 评论 -
phpsocket.io使用
安装请使用composer集成phpsocket.iocomposer require workerman/phpsocket.io脚本中引用vendor中的autoload.php实现SocketIO相关类的加载。例如require_once ‘/你的vendor路径/autoload.php’;服务端和客户端连接创建一个SocketIO服务端项目根目录创建start.php文件<?phprequire_once __DIR__.'/vendor/autoload.php'原创 2020-05-18 17:37:04 · 1671 阅读 · 1 评论 -
laravel 页面模板标签@foreache跳出循环
<td>@foreach($week_logs as $title) @if(isset($title['project_name'])) {{@$title['project_name']}} <?php break;?> @endif @endforeach</td>原创 2020-04-11 14:34:49 · 1199 阅读 · 0 评论 -
tcp流传输文件,接受文件头部缺失,ip方式监听上传
在模拟http方式上传的时候,虽然能够接收到文件,但是文件头部缺失一部分解决的时候需要在传输文件流的时候,在协议头和文件流中间空一行----------------------------773524727108982323338926Content-Disposition: form-data; name=“file”; filename=“log”Content-Type: ap...原创 2020-04-10 09:09:15 · 319 阅读 · 0 评论 -
php laravel文件下载显示文件损坏
laravel中文件的下载和php原生下载,关于下载出现文件损坏的问题原创 2020-03-26 16:39:53 · 654 阅读 · 1 评论 -
laravel+echarts根据时间进行分天,小时,月进行图表显示
需求可以选择时间区间,可以选择年份,快捷选择时间段三天、一周,可以选择精度,如;分,时,天,月,年来统计图表前端图表 var alldata = null $('#date_select2').click(function () { var d0 =$('#date0').val() var d...原创 2019-12-30 14:06:23 · 1441 阅读 · 0 评论 -
windows10下docker搭建php+nginx的web环境
doker安装网上很多参考资料,下一步到底就行在网上参考了许多文章,都没有成功的在本地搭建起php+nginx的环境,不是那里有些坑就是这里有些坑配置环境nginx:latestphp:7.1-fpm下载镜像docker pull php:7.1docker pull nginx:latest创建PHP容器镜像拉取完毕,进行容器的创建,并且将容器文件夹映射到本...原创 2019-12-19 16:11:47 · 1115 阅读 · 1 评论 -
php导出excel中数字会自动变成科学计数法
将数据导出excel文件变成科学计数法问题:分析:用程序导出的csv文件,当字段中有比较长的数字字段存在时,在用excel软件查看csv文件时就会变成科学技术法的表现形式。其实这个问题跟用什么语言导出csv文件没有关系。Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术法表示,还会只保留高15位,其他位都变0。解决方式:(只要把数字字...原创 2019-12-18 17:23:01 · 1111 阅读 · 0 评论 -
点击分页链接跳转到tab默认页
问题:项目中一个功能是一个tab导航的列表,每个tab下面都是一个列表,右边的tab数据较多会出现分页的情况,每次点击分页会刷新页面,就会自动跳到tab左边的列表,虽然对功能没有影响,用户体验上面不友好解决解决想法,让js判断是不是点击了分页了,分页之后,在去模拟人点击tab右边的列表 var url = window.location.href;当点击分页的时候地址中就会有...原创 2019-11-28 15:42:37 · 412 阅读 · 0 评论 -
php获取网址中的域名
$root = parse_url($url); {"scheme":"https","host":"mobile.ithome.com","path":"\/"}原创 2019-11-25 16:30:17 · 891 阅读 · 0 评论 -
在wamp中安装php拓展redis
redis作为一个非关系型数据库,强大的读写能力常常用来作为并发缓存来使用。在php内核中默认是没有redis拓展,我们需要自己安装拓展,下面我们以wamp的集成环境为例子来安装redis拓展。window10、php5.6.4PHP环境检查利用phpinfo()来打印php环境redis拓展安装下载对应版本的redis拓展点击进入 >>> 【php_r...原创 2019-11-12 10:55:57 · 352 阅读 · 0 评论 -
PHP参数闭包函数的应用场景
匿名函数<?php$mes = '你好';$fun = function($name){ printf($name);};$fun($mes);上面代码中我们可以看到,我们对匿名函数中name进行了赋值,我们可以理解为在具体业务中我们需要一系列的逻辑运算获得了$mes值,$fun($mes)就是进行赋值的操作闭包函数<?phpclass Person{...原创 2019-10-22 16:38:59 · 1293 阅读 · 0 评论 -
laravel中foreach&赋值不生效,出现XXXhas no effect问题
在进行多重foreach进行数据循环嵌套出现赋值无效。在内foreach中赋值成功,在内环打印,可以看到数据赋值成功。但是在外环打印发现内环的赋值无效。尝试去内环&引用,一般情况这种方式是能解决的,但是却是出现了has no effect问题解决办法:在中间定义一个中间变量,将中间变量进行循环,赋值完毕的数组,再赋值回来 foreach ($iqcs as $key=>$iq...原创 2019-09-20 17:22:22 · 1687 阅读 · 0 评论