Swoole

PHP7源码之array_unique函数分析

血红的双手。 提交于 2021-01-13 11:00:26
以下源码基于 PHP 7.3.8 array array_unique ( array array[,intarray[,intsort_flags = SORT_STRING ] ) (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_unique — 移除数组中重复的值 参数说明: array:输入的数组。 sort_flag:(可选)排序类型标记,用于修改排序行为,主要有以下值: SORT_REGULAR - 按照通常方法比较(不修改类型) SORT_NUMERIC - 按照数字形式比较 SORT_STRING - 按照字符串形式比较 SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。 array_unique 函数的源代码在 /ext/standard/array.c 文件中。由于 PHP_FUNCTION(array_unique){ // code... } 篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。 定义变量 zval *array; uint32_t idx; Bucket *p; struct bucketindex *arTmp, *cmpdata, *lastkept; unsigned int i; zend_long sort_type = PHP_SORT_STRING;

ubuntu18.4 安装swoole 和 php 扩展 swoole

Deadly 提交于 2021-01-13 07:30:12
首先在确定是否安装pecl和phpize如果未安装 sudo apt install php-pear sudo apt install php7.2-dev //这里我使用的是php7.2,具体请根据自己版本号 执行 sudo pecl install swoole 会自动安装swoole 再根据phpinfo中的php.ini的路径找到php.ini配置文件位置 在php cli(/etc/php/7.2/cli/php.ini 这是我的目录可以参考一下)的配置文件中加上 extension=swoole.so 重启php服务和web服务器服务 查看是否安装好,php -m 发现有swoole 则表示安装成功 1.错误情况 直接运行 sudo pecl install swoole 完成之后,以为swoole 模块安装完成,其实报错,未装好 查看 php -m 命令发现没有swoole的扩展 来源: oschina 链接: https://my.oschina.net/u/2835106/blog/3043803

mac 安装swoole

我是研究僧i 提交于 2020-12-30 11:31:28
Swoole 扩展是按照 PHP 标准扩展构建的。使用 phpize 来生成编译检测脚本, ./configure 来做编译配置检测, make 进行编译, make install 进行安装。 https://pecl.php.net/package/swoole 下载对应版本 解压后 放入 /usr/local/Cellar下 执行 sudo /usr/local/opt/php@7.2/bin/phpize (使用which phpize 查看phpize对应目录) 执行 ./configure --with-php-config=/usr/local/opt/php@7.2/bin/php-config 生成makefile文件 make && make install 来源: oschina 链接: https://my.oschina.net/u/3840669/blog/4869289

php使用shmop函数创建共享内存减少负载

回眸只為那壹抹淺笑 提交于 2020-12-26 11:54:39
PHP做内存共享有两套接口。一个是shm,它实际上是变量共享,会把对象变量序列化后再储存。使用起来倒是挺方便,但是序列化存储对于效率优先的内存访问操作而言就没啥意义了。另外一个是shmop,它是Linux和Windows通用的,不过功能上比shm弱了一些,在 Linux 上,这些函数直接是通过调用 shm* 系列的函数实现,而 Winodows 上也通过对系统函数的封装实现了同样的调用。 要创建共享内存段需要使用函数shmop,那么前提需要开启扩展。 shmop主要函数 shmop_open (创建或打开共享内存块)、shmop_write (向共享内存块中写入数据)、shmop_read (从共享内存块中读取数据)、shmop_size (获取共享内存块的大小)、shmop_close (关闭共享内存块)、shmop_delete (删除共享内存块) <?php //创建一块共享内存 $shm_key = 0x4337b101; $shm_id = @shmop_open($shm_key, 'c', 0644, 1024); //读取并写入数据 $data = shmop_read($shm_id, 0, 1024); shmop_write($shm_id, json_encode($data), 0); $size = shmop_size($shm_id); /

分享ZKEYS公有云分销系统部署详细教程

老子叫甜甜 提交于 2020-12-21 07:26:58
ZKEYS公有云分销系统为一套云业务管理系统,通过API的业务数据支持和强有力的安全监控支撑,能轻松的获取到低成本、高可用、可扩展、易维护的各类云应用及云产品资源,功能模块涵盖了 云服务器 、 托管主机 、 云虚拟主机 等产品的弹性在线购买及即时开通。以下分享 ZKEYS公有云分销系统部署详细教程: 1. 准备服务器 2. 准备已通过管局备案的域名 3. 准备授权信息 4. ZKEYS公有云分销系统源码获取 5. 安装ZKEYS公有云分销系统 不同的服务器操作系统环境搭建有所不同 注意:PHP必须安装 Swoole Compiler 扩展 6.设置ZKEYS授权 7.设置资源池接口 8. 更新系统 安装成功后,需登录后台对系统进行更新升级,确保系统为最新版本,否则部分新功能将不可用 9. 站点全局设置 位置:后台->系统->全局设置 为确保程序能正常运作,优先配置顺序:接口 -> 上传 -> 会员 -> 充值 -> 短信-> 邮件-> 其他项设置 全局设置中包含了站点的各项基本设置,请耐心将其填写完成 10. 配置后台权限 系统新增功能后,后台管理员需要添加新的权限,后台->系统->权限管理,将新增功能的权限勾选上即可 11. 同步产品资源 及 设置产品价格 12. 设置审核工作流 审核工作流用于财务相关的审核 13. 设置站务 在此处可添加产品的相关帮助文档、友情链接、新闻

六星教育创始人

时光总嘲笑我的痴心妄想 提交于 2020-12-19 07:42:06
六星教育创始人Pack老师 资深架构师、六星负责人 2008年,Pack老师成立杰越云信息企业,随后研发出内部独有的云平台系统,可承载千万级并发量,业内轰动一时,引起广泛关注。 2016年,Pack老师创办六星教育企业,专注培养高级精英IT技术人才。随着成立六星在线教育事业部,并设六星VIP教学中心,提供了更多“人人平等”的学习机会。 2017年,六星教育成为IT类目编程语言认证机构及年度最具影响力机构。 2018年,再次创办子公司——杰越云信息全资软件开发公司,为学员提供了大批实习实训机会,与六星教育、杰越学院形成教学管理、辅导服务、实训平台三法合一的企业成熟模式。 随着授课人数的增加,已累计为 30W+学员进行授课讲解,业内盛名远扬,权威性十足。 至今,Pack老师 作为教研技术团队负责人,始终坚守岗位一线。他曾任 IBM、拓维等上市企业架构师、开发主管等职, 有 12年大型项目研发经验。 熟练PHP、大数据web架构技能,精通开源框架运用和Linux参数配置及优化。具有大容量高并发电商应用架构设计、Hadoop大数据云平台等项目架构经验,并有多年企业专业培训经验。 课堂氛围轻松,注重寓教于乐,善于剖析原理,深入浅出,对技术有独特见解,深受学生好评。 为企业输送大量 IT技术精英人才,给互联网行业连番注入新鲜血液,推动了整个社会经济的发展。 人生格言: 身为世范,为人师表

记一次奇特的http curl爬坑之旅

依然范特西╮ 提交于 2020-12-17 08:16:37
背景 写到一个项目,要做一个简单的持久化任务,于是乎,我用到了swoole(毕竟phper,而且排期紧,swoole开发速度还是比java、 go 快)。 swoole 4 swoole 4 已经全量支持自动协程了,这点对于广大php开发者有很大的优势。 举个栗子吧。 $http->on('request',function (Swoole\Http\Request $req, Swoole\Http\Response $res) { //todo: 这里已经是协程调度了 }); 用swoole的话就最好使用最新版本(当然可能文档没跟上,这点需要观众朋友自行解决,不建议php新手入手)。 4.4是长期支持版本,目标是打造成工业级的(现在时间:2019-10-23) 出现情况 我在项目里使用了 guzzlehttp/guzzle, 版本^6.3。 然后,从某天起,就出现了很奇特的bug。 Could not resolve: oapi.dingtalk.com (Successful completion) 代码如下: $client = new \GuzzleHttp\Client([ 'base_uri' => 'https://oapi.dingtalk.com', 'timeout' => 5.0, 'verify' => false, ]); try{ $response

TP5使用Redis处理电商秒杀

人走茶凉 提交于 2020-12-17 00:33:38
本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1、首先在TP5中创建抢购活动所需要的Redis类库文件,代码如下: <php namespace app\base\service; use mikkle\tp_redis\RedisHashInfoBase; use think\Exception; class ScheduleDetail extends RedisHashInfoBase { protected $table="gopar_schedule_detail"; //数据表的 protected $pk = "id"; //数据表的主键 public function _initialize() { //判断数据存在 并设置检查周期10分钟 if (!$this->checkLock("dataExists") && !$this->checkTableDataExists()){ throw new Exception("相关产品数据不存在"); }else{ //设置检查锁10分钟 $this->setLock("dataExists",600); } //如果数据不存在 初始化读取数据 if (!$this->checkExists()){

解锁Redis锁的正确姿势

北城以北 提交于 2020-12-16 16:04:04
redis是php的好朋友,在php写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为。这个时候我们就要用到锁。锁的方式有好几种,php不能在内存中用锁,不能使用zookeeper加锁,使用数据库做锁又消耗比较大,这个时候我们一般会选用redis做锁机制。 setnx 锁在redis中最简单的数据结构就是string。最早的时候,上锁的操作一般使用setnx,这个命令是当:lock不存在的时候set一个val,或许你还会记得使用expire来增加锁的过期,解锁操作就是使用del命令,伪代码如下: 1if (Redis::setnx("my:lock", 1)) { 2 Redis::expire("my:lock", 10); 3 // ... do something 4 5 Redis::del("my:lock") 6} 这里其实是有问题的,问题就在于setnx和expire中间如果遇到crash等行为,可能这个lock就不会被释放了。于是进一步的优化方案可能是在lock中存储timestamp。判断timestamp的长短。 set 现在官方建议直接使用set来实现锁。我们可以使用set命令来替代setnx,就是下面这个样子 1if (Redis::set("my:lock", 1, "nx", "ex", 10)) { 2 ... do

关于hyperf 安装phpkafka

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-05 17:02:21
1、容器基本镜像:php:7.4-apache-buster; 2、安装hyperf 所需的组件(redis,swoole等),先确保hyperf-2.0.23能够正常运行。 3、安装phpkafka所需的组件bcmath: 3.1、docker exec -ti 容器名 bash : docker-php-ext-install bcmath docker-php-ext-enable bcmath composer config -g repo.packagist composer https://mirrors.aliyun.com/composer composer require longlang/phpkafka 来源: oschina 链接: https://my.oschina.net/u/3137744/blog/4776073