备份下代码
<?php namespace Lib\Library; use Closure; use Exception; /** * 文件锁 * 1.阻塞,进程加锁时发现其他进程已经加锁会一直阻塞等待,一直等到可以加锁成功,然后去执行业务代码 * 2.非阻塞,进程加锁时发现其他进程已经加锁直接返回,不会执行业务代码 * 3.注意Erp默认Session驱动为文件,本身请求已经存Session锁机制,所以测试非阻塞时请修改Session驱动为Redis * @package Lib\Library */ class FileLock { /** * 锁文件位置 * @var string */ private $file; /** * 锁文件句柄 * @var */ private $fileHandle; /** * 构造函数 * @param string $name 锁名称 * @throws Exception */ public function __construct($name = 'lock') { //初始化文件 $path = RUNTIME_PATH . 'Lock' . DIRECTORY_SEPARATOR; $this->file = $path . md5($name); if (!is_dir($path)) { if (!mkdir($path, 0777, true)) { throw new Exception('文件锁目录创建失败,请检查目录' . $path . '是否可写'); } } if (!file_exists($this->file)) { if (file_put_contents($this->file, '')) { throw new Exception('文件锁创建失败,请检查文件' . $this->file . '是否可写'); } } } /** * 加锁 * @param bool $block * @return bool */ public function lock($block = true) { $this->fileHandle = fopen($this->file, 'r'); $is_flock = $block ? flock($this->fileHandle, LOCK_EX) : flock($this->fileHandle, LOCK_EX | LOCK_NB); if (!$is_flock) { fclose($this->fileHandle); } return $is_flock; } /** * 释放 */ public function release() { if (!$this->fileHandle) { return false; } $unlock = flock($this->fileHandle, LOCK_UN); if ($unlock) { fclose($this->fileHandle); $this->fileHandle = null; } return $unlock; } /** * 加锁执行 * @param Closure $func 执行闭包函数 * @param bool $block 是否阻塞 * @return mixed 闭包函数的返回值 */ public function lockToExecute($func, $block = true) { $is_flock = $this->lock($block); $call_back = null; if ($is_flock) { $call_back = $func(); $this->release(); } return $call_back; } }
<?php //高先生简单验证码. //随机数 //为什么循环0-15的数字 //因为要实现最简单的字母和数字混搭 //16进制0-9 a-f //dechex 十进制转换为16进制 //创建一个四位的验证码. //$nmsg.  ...
最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...
今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...
最近在编写windows php多线程的东西,从官网下载了PHP的线程安全版,尝试开启curl扩展extension=php_curl.dllphp -m 却提示 PHP Startup: Unable to load dynamic library 'C:\php\ext\php_curl...
为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6...
//设置客户端断开依然运行 ignore_user_abort(true); //设置脚本不超时 set_time_limit(0); //死循环每隔1秒访问一次网址 while (true) { sleep(1); &nb...