微博数字Id与字符串Id的互转

微博数字Id与字符串Id的互转<?php class WeiboId { public static $meta = [ "0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e",&...

Laravel中间件的实现

Laravel 中间件 是通过pipeline执行的。pipeline 顾名思义,就是管道,相当于unnix中的管道符(|),laravel中间件大部分都是对request的过滤,这种过滤的行为相当于管道符对输出结果的处理,举个例子 ls -alh|grep acb.txt 这里grep abc.txt 就是对ls的结果进行处理,在laravel框架中相当于一个中间件。Laravel 中pipeline实现的方式非常简洁、有力,不但其实现原理如此,面对开发人员,它的调用方式也十分清晰,利用匿名函数使得前置与后置的调用都很直观。不过,很多人看到源码也很迷惑,因为中间存在着非常多的回调,只要...

更改Laravel的密码加密方式

我们知道laravel在数据库存储时默认的加密算法是Bcrypt,可以使用提供的辅助函数bcrypt 或者使用Hash Facade 来完成密码的加密,使用Laravel的Auth Facade来完成认证,实际上,我们在很多项目因为各种原因并不使用Bcrypt加密存储用户密码,而很多项目还在使用md5或者自己造的乱七八糟的加密方式,这里举个例子使用base64(password + salt)的加密方式来尝试无痛的更换laravel的密码加密方式,从而能够使用laravel的Auth,当然,实际的项目中我相信没人用这样的加密方式。这个例子有助于理解laravel的ServiceProvi...

从源码看Laravel queue:listen queue:work queue:work --daemon的区别

功能概述Laravel的队列监听有多个命令可以实现,其中queue:listen和queue:work --daemon仅仅从运行命令后的的表现看不出明显的区别,那么他们到底有什么区别呢?laravel给queue:listen 和 queue:work的描述分别是:queue:listen:Listen to a given queue//监听一个队列 queue:work:Start processing jobs on the queue as a daemon//作为守护进程处理队列中的任务但是好像并没有说清楚根本区别在哪里,所以我们还是简单的查看下源码来了解下根本区别.源码解读...

Laravel 访问频率限制中间件throttle的使用

访问频率限制概述频率限制经常用在API中,用于限制独立请求者对特定API的请求频率。例如,如果设置频率限制为每分钟1000次,如果一分钟内超过这个限制,那么服务器就会返回 429: Too Many Attempts.响应。通常,一个编码良好的、实现了频率限制的应用还会回传三个响应头: X-RateLimit-Limit, X-RateLimit-Remaining和 Retry-After(如果达到限制次数只能获取到 Retry-After头)。 X-RateLimit-Limit告诉我们在指定时间内允许的最大请求次数, X-RateLimit-Remaining指的是在指定时间段内剩...

PHP单例设计模式实例

特点单例模式是PHP中一种常见的设计模式,主要有以下几个特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。实现基于单例模式特点,要实现单例模式非常简单:构造方法(__constructor)设为私有(必须自己创建实例,保证不被外部创建)关闭clone,关闭serialize(还是为了保证唯一)一个静态(static)属性保存实例一个静态(static)方法创建实例(因为不能被new,所以只能是静态方法)看起来已经很严密了,来个实际例子吧final class Singleton { private static $instance...

字体资源跨域配置

Nginxlocation ~* \.(eot|ttf|woff|svg|otf)$ { add_header Access-Control-Allow-Origin *或域名; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; } Apache<FilesMatch "\.(ttf|otf|eot|woff)$"> <IfModule mod...