备份下代码
<?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; } }
function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...
<?php /* *算法学习自百度.只是学习和记录 */ header("Content-type:text/html;charset=utf-8"); //1.设置奖项,id是奖项id,name是中奖名称,v是中奖概率 $arr =&n...
在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...
ThinkPHP中有一个debug调试功能,能输出报错文件的信息,并能看到这个函数被哪些函数调用,从框架的启动开始记录,特别方便调试。于是研究了下它的底层给予了实现。<?php //--框架核心--Start //框架内置错误处理 function errDealWith($er...
(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...
posix_ttyname - 获取当前终端设备名称。<?php var_dump( posix_ttyname(STDOUT) );我们启动一个终端,执行上面的代码输出:/dev/tty1我们再启动一个终端,执行上面的代码输...