Yii

mysql LIKE with double percent

|▌冷眼眸甩不掉的悲伤 提交于 2020-08-27 07:38:11
问题 I just debugging a legacy code and I found a strange part in it. Does anybody has an idea, what does the following mean in the MYSQL string? full_name LIKE '%%{fullname}%%' 回答1: As in the answer Mihir Dave's comment links to, there's no difference to SQL if you pass %% instead of % . Since a single % matches zero or more characters, then each of the metacharacters in %% would also match zero or more, and ultimately the same string would match one way or another. But I'd guess your legacy code

Importing csv into mongodb using PHP code

℡╲_俬逩灬. 提交于 2020-08-26 07:17:08
问题 Im using MongoCollection::batchInsert() to insert csv data into mongodb, <?php $mongo = new Mongo("mongodb://192.168.1.7:27017"); $collection = $mongo->test->cartoons; $row = 1; $handle = fopen(dirname(Yii::app()->request->scriptFile).'/images/importcsv/upload.csv', "r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); echo "<p> $num fields in line $row: <br /></p>\n"; $row++; $users = array(); for ($c=0; $c < $num; $c++) { echo 'data--'.$data[$c] . "<br />\n";

Redis 之服务器集群配置

£可爱£侵袭症+ 提交于 2020-08-19 09:35:11
常见的集群架构如图: redis操作过程中数据同步的函数调用关系: 集群搭建:   1.修改3个redis.config 文件的:   2.启动2个redis服务器 当杀掉redis主进程Master时,由于Slave(6380)只读,则无法向redis中写数据了,这时我们将借助sentinel工具进行监控主从服务器。 以上内容希望帮助到大家, 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家 ,需要戳这里 PHP进阶架构师>>>实战视频、大厂面试文档免费获取 来源: oschina 链接: https://my.oschina.net/u/4234147/blog/4511551

PHP操作Redis,记不住多操作几次

感情迁移 提交于 2020-08-18 03:07:43
redis 的基本操作方法 1.redis 的连接 : //实例化redis $redis = new Redis(); //连接 $redis->connect('127.0.0.1', 6379); //检测是否连接成功 echo "Server is running: " . $redis->ping(); // 输出结果 Server is running: +PONG 2.redis 操作 Strng (字符串): // 设置一个字符串的值 $redis->set('cat', 111); //获取一个字符串的值 echo $redis->get('cat'); // 111 // 重复set $redis->set('cat', 222); echo $redis->get('cat'); // 222 3.redis 操作 List (列表): //存储数据到列表中 $redis->lpush('list', 'html'); $redis->lpush('list', 'css'); $redis->lpush('list', 'php'); //获取列表中所有的值 $list = $redis->lrange('list', 0, -1); print_r($list);echo '<br>'; // Array ( [0] => php [1] => css

PHP 多任务秒级定时器的实现方法

戏子无情 提交于 2020-08-17 20:11:20
描述 最近在公司部署crontab的时候,突发奇想是否可以用PHP去实现一个定时器,颗粒度到秒级就好,因为crontab最多到分钟级别,同时也调研了一下用PHP去实现的定时器还真不太多,Swoole 扩展里面到实现了一个毫秒级的定时器很高效,后面写一篇,先用PHP去实现一个定时器类,以供学习参考。 实现 在实现定时器代码的时候,用到了PHP系统自带的两个扩展 Pcntl - 多进程扩展 : 主要就是让PHP可以同时开启很多子进程,并行的去处理一些任务。 Spl - SplMinHeap - 小顶堆 一个小顶堆数据结构,在实现定时器的时候,采用这种结构效率还是不错的,插入、删除的时间复杂度都是 O(logN) ,像 libevent 的定时器也在 1.4 版本以后采用了这种数据结构之前用的是 rbtree,如果要是使用链表或者固定的数组,每次插入、删除可能都需要重新遍历或者排序,还是有一定的性能问题的。 流程 说明 1、定义定时器结构,有什么参数之类的. 2、然后全部注册进我们的定时器类 Timer. 3、调用定时器类的monitor方法,开始进行监听. 4、监听过程就是一个while死循环,不断的去看时间堆的堆顶是否到期了,本来考虑每秒循环看一次,后来一想每秒循环看一次还是有点问题,如果正好在我们sleep(1)的时候定时器有到期的了,那我们就不能马上去精准执行,可能会有延时的风险

PHP 闭包那点事儿

余生颓废 提交于 2020-08-17 17:07:31
匿名函数 匿名函数,也叫闭包函数,说白了就是“没有名字的函数”,和一般函数结构一样,只是少了函数名以及最后需要加上分号 ; 。 注:理论上讲闭包和匿名函数是不同的概念,不过PHP将其视作相同的概念。 $func = function() { echo 'Hello World' . PHP_EOL; }; $func(); 匿名函数和普通函数的区分有: 匿名函数也可以作为变量的值来使用。 匿名函数可以从父作用域继承变量,而这个父作用域是定义该闭包的函数(不一定是调用它的函数)。 $message = 'hello'; $example = function () use ($message) { return $message; }; $message = 'world'; echo $example(); 输出:hello 注意:必须使用 use 关键字将变量传递进去才行,具体见 官方文档 。 闭包类 定义一个闭包函数,其实就是实例化一个闭包类( Closure )对象: $func = function() { echo 'hello world' . PHP_EOL; }; var_dump($func); 输出: object(Closure)#1 (0) { } 类摘要: Closure { __construct ( void ) public static

理解PHP垃圾回收机制

让人想犯罪 __ 提交于 2020-08-17 15:51:30
php的垃圾回收机制可以简单总结为 引用计数 写时复制 COW机制。 引用计数基本知识 官网的解答如下 每个php变量存在一个叫”zval”的变量容器中一个zval变量容器,除了包含变量的类型和值 ,还包括两个字节的额外信息 is_ref 和 refcount is_ref 是个bool值,用来标识这个变量是否是属于引用集合(reference set)。 通过这个字节,php引擎才能把普通变量和引用变量区分开来 refcount 用以表示指向这个zval变量容器的变量个数 PHP5 中的引用计数在PHP5中,zval 的内存是单独从堆(heap)中分配的(有少数例外情况),PHP 需要知道哪些 zval 是正在使用的,哪些是需要释放的。所以这就需要用到引用计数:zval 中 refcount__gc 的值用于保存 zval 本身被引用的次数,比如 b = 12语句中,12 被两个变量引用,所以它的引用计数就是 2。如果引用计数变成 0,就意味着这个变量已经没有用了,内存也就可以释放了。 如下: <?php //php zval变量容器 $a = 1 ; $b = 1 ; $c = & $a ; $d = $b ; $e = range ( 0 , 3 ); xdebug_debug_zval ( 'a' ); xdebug_debug_zval ( 'b' ); xdebug

PHP-Swoole操作多进程步骤

爱⌒轻易说出口 提交于 2020-08-16 10:17:48
在以往的开发项目中,要操作进程就会使用PHP自带的 pcntl拓展。但是pcntl存在着许多的不足: pcntl没有提供进程间通信的功能 pcntl不支持重定向标准输入和输出 pcntl只提供了fork这样原始的接口,容易使用错误 这边我们使用swoole进程管理模块,用来替代 PHP 的 pcntl ; 场景:日常任务中,有时需要通过php脚本执行一些日志分析,队列处理等任务,当数据量比较大时,可以使用多进程来处理。 准备: 安装PHP_swoole拓展; write($data)   向管道内写入数据。 $data 的长度在 Linux 系统下最大不超过 8K , MacOS/FreeBSD 下最大不超过 2K start():    执行fork调用,启动子进程。 /** 创建子进程,将数据写入管道,然后启动子进程 */ $process = new \swoole_process([$this, 'sonProcessWork']); $process->write(json_encode($data_pop)); $pid = $process->start(); swoole_event_add():  将一个socket加入到底层的 reactor 事件监听中;在子进程中处理一些耗时的计算或者操作; /** 获取管道的业务数据,进行相关的操作 */ public

redis 缓存锁的实现方法

醉酒当歌 提交于 2020-08-15 08:03:55
1. redis加锁分类 redis能用的的加锁命令分表是INCR、SETNX、SET 2. 第一种锁命令 INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作进行加一。 然后其它用户在执行 INCR 操作进行加一时,如果返回的数大于 1 ,说明这个锁正在被使用当中。 1、 客户端A请求服务器获取key的值为1表示获取了锁 2、 客户端B也去请求服务器获取key的值为2表示获取锁失败 3、 客户端A执行代码完成,删除锁 4、 客户端B在等待一段时间后在去请求的时候获取key的值为1表示获取锁成功 5、 客户端B执行代码完成,删除锁 $redis->incr($key); $redis->expire($key, $ttl); //设置生成时间为1秒 3. 第二种锁 SETNX 这种加锁的思路是,如果 key 不存在,将 key 设置为 value 如果 key 已存在,则 SETNX 不做任何动作 1、 客户端A请求服务器设置key的值,如果设置成功就表示加锁成功 2、 客户端B也去请求服务器设置key的值,如果返回失败,那么就代表加锁失败 3、 客户端A执行代码完成,删除锁 4、 客户端B在等待一段时间后在去请求设置key的值,设置成功 5、 客户端B执行代码完成,删除锁 $redis->setNX($key,