php
meng-xiang
记录点什么
展开
-
一次排查PHP内存溢出的心路:PHP Fatal Error Allowed memory size
一个项目的服务器报错Fatal error: Allowed memory size of 2097152 bytes exhausted (tried to allocate 4096 bytes)从报错容易看出,PHP进程的内存不够用了,超过了 2097152 字节的限制。将 byte 换算成 M,也就是2M。大家应该知道,PHP通过ini文件控制单个进程分配的内存大小。查看php.ini路径# php -i | grep php.iniConfiguration File (php.in原创 2021-03-18 10:10:44 · 3922 阅读 · 0 评论 -
jobs:一个帮助你更好地组织任务的PHP库
在你的项目中,可能会遇到使用异步任务的场景,异步任务需要满足以下需求任务执行时间可自主设定(延时任务)任务失败可重试,并有最大重试次数限制任务失败后,下次重试的时间可自主设定,如固定间隔时间,随着失败次数增加逐渐增大间隔时间对于有依赖关系的任务,需要按顺序执行有些任务的执行结果依赖外部回调,需要有一个中间状态php-jobs 是一个不错的实现。这是一个抽象的库,具体的mod...原创 2018-03-29 16:39:59 · 260 阅读 · 0 评论 -
在业务代码中植入异步通知功能
对异步通知的定位,是作为核心业务的一种补充,应该尽量与核心业务解耦。采用的解耦方式为“事件+监听器”。一些主流的php web框架,如laravel、yii2对“事件+监听器”的支持是“开箱即用”的,只需写少量的代码(通常是增加一些配置项)即可。这里描述的设计思想是“解耦”,是和语言无关的,属于“设计模式”的范畴。概念事件业务系统在某个时机触发事件,例如订单发货了,这时...原创 2018-02-24 11:33:34 · 275 阅读 · 0 评论 -
将10进制整数转为64进制形式的PHP实现
/** * @param int $integer 10进制正整数 * @return string 64进制形式 */function decimal_to_base64($integer){ $chars_map = [ 0 => '0', 1 => '1', 2 => '2', 3 => '3',原创 2017-11-13 14:44:20 · 2294 阅读 · 0 评论 -
PHP empty函数测试对象使用魔术方法获取的属性
php empty原创 2017-03-17 10:05:07 · 1465 阅读 · 3 评论 -
像查询MySql一样查询Redis
关系型数据库如MySql有丰富的SQL语句供我们使用,如wherewhere ininsertupdatedeleteorder bycount, sum, max, min等等。有些人曾经期待过,能否像查询MySql一样查询Redis?我就是其中的一员。现在有一个php库可以帮助你达成这个期待:redmodel安装推荐通过composer安装composer require "li原创 2017-03-30 13:18:31 · 6419 阅读 · 0 评论 -
一个抢红包的PHP库:redenvelope
抢红包红包php原创 2017-03-06 18:00:56 · 1072 阅读 · 0 评论 -
将Redis操作封装成Model
Redis经常作为一种内存化的数据库使用,将Redis封装成Model,同一业务类型数据的操作都放在一个Model里,这样可以提高代码的可维护性。为此,我写了一个开源的库redmodel,将Redis常用的操作封装成了类似数据库查询语句的方法。例如一个key模式为user:{id}:profile的Hash类型的Model,更新操作$model->where('id', 1)->update([原创 2016-12-08 15:01:36 · 1923 阅读 · 0 评论 -
XSS(cross-site scripting,跨站脚本攻击)简单示例
什么是XSSXSS(cross-site scripting),跨站脚本攻击,是Web安全中很重要的一个议题。 这篇文章演示了如何利用脚本注入来攻击一个网站,以及如何抵御这种注入攻击。网站源代码<?php$xss = isset($_POST['xss']) ? $_POST['xss'] : '';if ($xss) { file_put_contents('post.data',$原创 2015-07-12 09:13:18 · 2753 阅读 · 0 评论 -
怎样获取表单中multiple select的输入数据
表单获取multiple select输入数组multiple select values in array翻译 2016-07-02 15:42:01 · 8031 阅读 · 1 评论 -
Lumen 5创建Facade类
Laravel的Facade,实际上是对service container中的service provider的一层包装,使用魔术方法__callStatic调用service provider类的方法。原创 2016-05-05 17:12:56 · 4418 阅读 · 0 评论 -
Lumen log daily 每天创建一份日志文件
lumen log daily每天创建一份日志文件原创 2016-05-05 16:36:01 · 5830 阅读 · 2 评论 -
php composer autoload添加个性化命名空间
修改composer.json autoload部分运行 composer dumpautoload原创 2016-03-18 18:04:54 · 2048 阅读 · 0 评论 -
乐观锁、悲观锁及memcached实现方案
乐观锁与悲观锁乐观锁与悲观锁的定义不再赘述,简单说一下我的理解。乐观锁假定不会出现并发问题,只有更新数据时才检查数据是否被锁定。悲观锁假定会出现并发问题,读取数据时即将数据锁定。memcached实现乐观锁先假定一个场景:商品抢购。有N件商品,商品剩余数量存在memcached里,一个抢购的请求过来,商品剩余数量需减1,直到0。读取商品剩余数量,并获取token,如果剩余数量为0,则退出商品剩余原创 2016-03-02 17:02:54 · 2039 阅读 · 0 评论 -
正则表达式:不匹配特定的字符串
前言近期在做一个web应用jsonaz.com,该应用可以将JSON转为PHP数组,或将PHP数组转为JSON。需要在后台对用户提交的PHP代码进行校验,检验用户是否输入了PHP自带的函数,例如:array(1,2,3)是合法的,date(‘Y-m-d’)则是不合法的。因此,需要用正则表达式匹配非array开始的字符串。正向预查之正向不匹配先举个例子,加粗代表匹配正则:不匹配array,(?!a)原创 2015-12-13 10:27:52 · 16620 阅读 · 0 评论 -
Laravel5 container & service provider
前言在看本篇博文之前,你应该对Laravel5有了初步的了解。例如如何定义路由与相应的控制器,如何使用Model操作数据库,如何渲染视图。掌握了以上技能,就已经可以顺畅的使用Laravel进行web开发了。对于想深入了解Laravel的伙伴们,接下来就应该了解Laravel的container和service provider。城堡、管家和奴隶从前有一个城堡,这个城堡有个大原创 2015-04-10 19:39:30 · 1906 阅读 · 1 评论