- 博客(162)
- 资源 (7)
- 收藏
- 关注

原创 【php7扩展开发六】zval的操作
生成各类型zvalPHP7将变量的引用计数转移到了具体的value上,所以zval更多的是作为统一的传输格式,很多情况下只是临时性使用,比如函数调用时的传参,最终需要的数据是zval携带的zend_value,函数从zval取得zend_value后就不再关心zval了,这种就可以直接在栈上分配zval。分配完zval后需要将其设置为我们需要的类型以及设置其zend_value,PHP中定义的...
2019-01-11 17:47:27
1047

原创 【php7扩展开发五】函数调用
实际应用中,扩展可能需要调用用户自定义的函数或者其他扩展定义的内部函数,PHP提供的函数调用API的使用:ZEND_API int call_user_function(HashTable *function_table, zval *object,zval *function_name, zval *retval_ptr, uint32_t param_count, zval params...
2019-01-10 16:48:07
394

原创 【php7扩展开发四】函数的参数 ,引用传参 ,返回值
函数参数解析之前我们定义的函数没有接收任何参数,那么扩展定义的内部函数如何读取参数呢?用户自定义函数在编译时会为每个参数创建一个zend_arg_info结构,这个结构用来记录参数的名称、是否引用传参、是否为可变参数等,在存储上函数参数与局部变量相同,都分配在zend_execute_data上,且最先分配的就是函数参数,调用函数时首先会进行参数传递,按参数次序依次将参数的value从调用空间...
2019-01-10 15:26:35
1831

原创 【php7扩展开发三】ini配置
php.ini配置php.ini是PHP主要的配置文件,解析时PHP将在这些地方依次查找该文件:当前工作目录、环境变量PHPRC指定目录、编译时指定的路径,在命令行模式下,php.ini的查找路径可以用-c 参数替代。该文件的语法非常简单: 配置标识符 = 值 。空白字符和用分号';'开始的行被忽略,[xxx]行也被忽略;配置标识符大写敏感,通常会用'.'区分不同的节;值可以是数字、字符串、...
2019-01-09 12:25:28
982

原创 【php7扩展开发一】注册一个内部函数 hello world
通过扩展可以将C语言实现的函数提供给PHP脚本使用,如同大量PHP内置函数一样,这些函数统称为内部函数(internal function),与PHP脚本中定义的用户函数不同,它们无需经历用户函数的编译过程,同时执行时也不像用户函数那样每一个指令都调用一次C语言编写的handler函数,因此,内部函数的执行效率更高。除了性能上的优势,内部函数还可以拥有更高的控制权限,可发挥的作用也更大,能够完成很...
2019-01-09 11:04:29
467

原创 【php7扩展开发二】全局变量
使用C语言开发程序时经常会使用全局变量进行数据存储,这就涉及前面已经介绍过的一个问题:线程安全,PHP设计了TSRM(即:线程安全资源管理器)用于解决这个问题,内核中频繁使用到的EG、CG等都是根据是否开启ZTS封装的宏,同样的,在扩展中也需要必须按照TSRM的规范定义全局变量,除非你的扩展不支持多线程的环境。PHP为扩展的全局变量提供了一种存储方式:每个扩展将自己所有的全局变量统一定义在一个...
2019-01-08 18:26:32
1113
转载 帝国cms【官方教程系列教程一】 首页模板制作
帝国cms首页模板是指网站首页的模板。(/index.html)修改首页模板1、登录后台,单击“模板”菜单,选择“首页模板”子菜单,进入修改首页模板界面:2、进入修改首页模板界面:3、首页模板支持的变量说明 [!--news.url--]:网站地址(参数设置的站点地址) [!--class.menu--]:一级栏目导航 [!--pag...
2020-03-23 11:52:27
3552
转载 linux中sort命令
功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。参 数: -b 忽略每行前面开始出的空格字符。 -c 检查文件是否已经按照顺序排序。 -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。 -f 排序时,将小写字母视为大写字母。 -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。...
2019-01-30 10:32:19
666
转载 真正的inotify+rsync实时同步 彻底告别同步慢
我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题。但当web文件越来越多(百万级数量html,jpg等小 文件),同步就越来越慢,根本做不到实时,按照网上的调优方法都尝试过,问题根本没有解决。经过我一翻细致研究,终于把慢的核心问题研究明白,先总结一句 inotifywait响应不会有延迟,rsync也很快。大家同样有慢的烦恼,那是因为网上的inotify+rsyn...
2019-01-29 17:32:46
457
原创 Linux 文件同步rsync
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。安装rsync我们使用wget进行下载,安装包下载完毕后,我们开始解压并安装wget https://download.samba.org/pub/rsync/src/rsy...
2019-01-27 18:02:08
2538
1
转载 Linux 用户管理及用户权限设置
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主...
2019-01-27 11:22:58
42804
1
转载 Linux 定时任务crontab
crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crontab依赖的服务就是crond,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。这个crond定时任务服务就相当于我们生活中的闹钟!由于crond 是Linu...
2019-01-26 16:16:37
352
翻译 Linxu ps命令
ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。ps命令支持三种使用的语法格式UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符 BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符 GNU 风格的长选项,选项前有两个“-”连字符我们能够混用这几种风格,但是可能会发生冲突。本文使用 U...
2019-01-26 12:12:15
333
原创 Linux netstat命令详解
简介netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。netstat的输出结果可以分为两个部分:1. Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的...
2019-01-25 18:10:37
429
转载 Linux awk命令
awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。使用方法awk '{pattern + action}' {filenames}尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 ac...
2019-01-24 17:42:55
357
原创 nginx日志配置
1. 配置错误日志 Error LogNginx 将遇到的不同严重级别问题的信息写入错误日志。 error_log 指令设置对特定文件,stderr 或 syslog 的日志记录,并指定要记录的消息的最低严重级别。 默认情况下,错误日志位于 logs/error.log(绝对路径取决于操作系统和安装),并且默认记录所有严重级别的消息。 下面的配置将记录错误信息的最低级别从 error 改为 ...
2019-01-23 16:09:05
894
原创 时序数据库InfluxDB使用详解--几个重要概念
influxdb的安装这里就不在说明了 ,这里已经做了说明https://blog.youkuaiyun.com/rorntuck7/article/details/86559223。下面我们来介绍一下influxdb里面有一些重要概念database,timestamp,field key, field value, field set,tag key,tag value,tag set,measu...
2019-01-21 12:01:43
3629
原创 ubuntu上 grafana + influxdb + telegraf 安装配置
Grafana 一个纯粹的HTML/JS应用,其功能非常强大,访问InfluxDB时不会有跨域访问的限制。只要配置好数据源为InfluxDB之后就可以,剩下的工作就是配置图表。InfluxDB 开源的分布式时序、时间和指标数据库,使用Go语言编写,无需外部依赖。其中,时间序列数据库是数据格式里包含Timestamp字段的数据,比如某一时间用户上网流量、通话详单等。但是,有什么数据不...
2019-01-20 10:11:02
2000
原创 【php7内核】静态变量,全局变量,常量的实现
最近在读php7内核,本文是由《PHP7内核剖析》整理而来。静态变量PHP中局部变量分配在zend_execute_data结构上,每次执行zend_op_array都会生成一个新的zend_execute_data,局部变量在执行之初分配,然后在执行结束时释放,这是局部变量的生命周期,而局部变量中有一种特殊的类型:静态变量,它们不会在函数执行完后释放,当程序执行离开函数域时静态变量的值被...
2019-01-06 15:29:46
1106
原创 【php7内核】数组的实现
数组是PHP中非常强大、灵活的一种数据类型,它的底层实现为散列表(HashTable,也称作:哈希表),除了我们熟悉的PHP用户空间的Array类型之外,内核中也随处用到散列表,比如函数、类、常量、已include文件的索引表、全局符号表等都用的HashTable存储。散列表是根据关键码值(Key value)而直接进行访问的数据结构,它的key - value之间存在一个映射函数,...
2019-01-05 16:37:37
1053
原创 【php7内核】变量的内部实现
最近在读php7内核,本文是由《PHP7内核剖析》整理而来。变量的内部实现变量是一个语言实现的基础,变量有两个组成部分:变量名、变量值,PHP中可以将其对应为:zval、zend_value,这两个概念一定要区分开,PHP中变量的内存是通过引用计数进行管理的,而且PHP7中引用计数是在zend_value而不是zval上,变量之间的传递、赋值通常也是针对zend_value。PHP中可以通...
2019-01-05 10:19:49
300
原创 C 语言中的结构体struct、联合体union
共用体(union) 1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型 和不同长度的变量。 下例表示说明一个联合a_bc...
2019-01-03 17:34:52
957
原创 c 文件操作相关函数总结
文件概述文件是指存储在外部存储器上的数据集合。更准确的来说,文件就是一组相关元素或数据的有序集合,而且每个集合都有一个符号化的指代,称这个符号化的指代为文件名。文件类型根据文件在外部存储器上的组织形式,文件可以分为ASCII文件和二进制文件。ASCII文件(文本文件):以字符的方式进行存储,一个字符对应一个ASCII码,而一个ASCII码占用1字节。例如:整数12在内存中占用4个字...
2018-12-28 18:12:03
984
原创 Redis如何做持久化的?
redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在r...
2018-12-05 12:17:12
320
转载 大数据计算:如何仅用1.5KB内存为十亿对象计数 - Hyper LogLog 算法
his is a guest post by Matt Abrams (@abramsm), from Clearspring, discussing how they are able to accurately estimate the cardinality of sets with billions of distinct elements using surprisingly small...
2018-12-05 10:52:18
226
原创 Redis分布式锁----乐观锁的实现,以秒杀系统为例
乐观锁 大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个”version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。red...
2018-12-03 15:43:38
182
原创 Redis常见使用场景(PHP实战)
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。本篇文章,主要介绍利用PHP使用Redis,主要的应用场景。简单字符串缓存实战<?php/**set/hset 的区别假设新开一所学校set/get方法存储的是单个数据,相当于往学校里面塞入一个学生,查找的时候全部集合到一起,点名找...
2018-12-03 14:27:41
768
转载 Redis 的操作为什么是的原子性的详解
原子性原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis操作原子性的原因Redis的操作之所以是原子性的,是因为Redis是单线程的。由于对操作系统相关的知识不是很...
2018-12-03 11:44:33
4877
转载 lvm-snapshot备份mysql数据(全量+增量)
lvm-snapshot:基于LVM快照的备份1.关于快照:1)事务日志跟数据文件必须在同一个卷上;2)刚刚创立的快照卷,里面没有任何数据,所有数据均来源于原卷3)一旦原卷数据发生修改,修改的数据将复制到快照卷中,此时访问数据一部分来自于快照卷,一部分来自于原卷4)当快照使用过程中,如果修改的数据量大于快照卷容量,则会导致快照卷崩溃。 5)快照卷本身不是备份,只是提供一个时间一致性的访...
2018-12-03 10:40:03
762
原创 mysqldump备份(全量+增量)方案操作记录
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据。线上数据库备份场景:每周日执行一次全量备份,然后每天下午1点执行MySQLdump增量备份.下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是MySQL打开binlog日志功能“log-bin=”后的字符串为日志记载目录,一般建议放在不...
2018-12-01 10:34:04
512
原创 Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷!废话不多说,下面是梳理的binlog日志操作解说:一、初步了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句s...
2018-11-30 17:20:53
585
1
转载 定时备份脚本分享(网站数据和数据库数据)
1)网站数据备份将网站数据/var/www/vhost/www.hqsb.com和/var/www/vhost/www.huanqiu.com分别备份到:/Data/code-backup/www.hqsb.com和/Data/code-backup/www.huanqiu.com下。 [root@huanqiu_web5 code-backup]# cat web_code_back...
2018-11-30 12:17:10
275
转载 《后端架构师技术图谱》先收藏
数据结构 队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B,B+,B*树 LSM 树 BitSet 常用算法 排序、查找算法 选择排序 冒泡排序 插入排序 快速排序 归并排序 希尔排序 堆排序 计数排序 ...
2018-11-30 10:08:31
1576
原创 PHP中引用的详解
1. PHP中引用的特性PHP中引用意味着用不同的名字访问同一个变量内容,引用不是C的指针(C语言中的指针里面存储的是变量的内容,在内存中存放的地址),是变量的另外一个别名或者映射。注意在 PHP 中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是 Unix 的文件名和文件本身――变量名是目录条目,而变量内容则是文件本身。引用可以被看作是 Unix 文件系统中的紧密...
2018-11-29 15:00:32
215
原创 PHP 自动捕获 Fatal Error
PHP 有捕获 Error 和 Exception 的函数设置一个用户的函数来处理脚本中出现的错误。set_error_handler($callback)//设置一个用户的函数来处理脚本中出现的异常。set_exception_handler($callback)测试异常捕获<?php//设置异常捕获函数set_exception_handler("my_...
2018-11-29 11:48:20
1229
原创 web 安全与性能
ApacheApache 案例Apache : rootApache 子进程 : nobodyHTDOCS 目录 : /var/www/var/www|--include|--image|--temp|--...很多人会将/var/www用户与组设置为 nobody:nogroup / nobody:nobody, 同时因为images会上传文件需要设置777, 很多书...
2018-11-29 11:01:54
601
转载 PHP RSA加解密示例
原理RSA 算法的可靠性基础:对极大整数做因数分解是很困难的。RSA 是非对称算法,加解密使用不同的密钥。两个密钥都可以用于加密,解密时需要使用另一个密钥。但是,通常用公钥加密私钥解密,因为公钥是近乎完全公开的,对于私钥加密的数据,有太多的人可以解密了。理论上 A 和 B 之间要通过 RSA 实现保密通信,需要 A 和 B 各自生成一组密钥,同时保管好自己的私钥;用对方的公钥加密要发送...
2018-11-28 16:59:10
228
转载 PHP开发api接口安全验证
php的api接口在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证。验证原理原理从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名。时间戳:当前时间...
2018-11-28 16:27:12
162
转载 php----stream_socket_pair
stream_socket_pair,他的作用是创建一对完全一样的网络套接字连接流 ,通常会被用在进程间的通信具体参数这里不再讲述,文档里都有,我们解释一下文档中的例子?php$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);$pid = pcntl_fork...
2018-11-28 15:01:07
389
转载 php进程间通信--信号量
信号量是什么? 信号量 : 又称为信号灯、旗语 用来解决进程(线程同步的问题),类似于一把锁,访问前获取锁(获取不到则等待),访问后释放锁。 举一个生活中的例子:以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开...
2018-11-28 12:29:28
376
Andriod Snackbar 案例源代码下载
2017-03-08
基于TP3.1.2的通用网站后台
2014-12-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人