分类 php 下的文章
text类型存储技巧
当业务中需要存储大文本,比如文章内容、html页面等等,对于这类数据存储时需要考率文本长度,小了会对文本进行截取。
mysql中该字段往往用text类型存储。大文本类型有:
tinytext(0-255)、text(0-65535)、mediumtext(0-16777215)2^24、longtext(0-4,294,967,296)2^32
压缩
在设计初,可以考率对文本进行压缩再存储
php: gzcompress gzdeflate gzencode
DivisionByZeroError
DivisionByZeroError 除数为0时被抛出 fatal error
https://www.php.net/manual/zh/class.divisionbyzeroerror.php
在找分表所在的表时,没有配置最大分表数,% null(0)
php 定界符
php内核 zval
php7新特性
新加4个标量类型声明
php7之前已经存在的函数参数类型有:class,self,array,callable
php7之后新加入的有:bool,float,int,string,object
php 数组
本文转自 https://www.laruence.com/2020/02/25/3182.html
php5
php5中hashtable结构
typedef struct _hashtable {
uint nTableSize; /* 散列表大小, Hash值的区间 */
uint nTableMask; /* 等于nTableSize -1, 用于快速定位 */
uint nNumOfElements; /* HashTable中实际元素的个数 */
ulong nNextFreeElement; /* 下个空闲可用位置的数字索引 */
Bucket *pInternalPointer; /* 内部位置指针, 会被reset, current这些遍历函数使用 */
Bucket *pListHead; /* 头元素, 用于线性遍历 */
Bucket *pListTail; /* 尾元素, 用于线性遍历 */
Bucket **arBuckets; /* 实际的存储容器 */
dtor_func_t pDestructor;/* 元素的析构函数(指针) */
zend_bool persistent;
unsigned char nApplyCount; /* 循环遍历保护 */
zend_bool bApplyProtection;
#if ZEND_DEBUG
int inconsistent;
#endif
} HashTable;
include 和 reqiure
官方文档里主要介绍了include,require很少,因为它也说了,用法几乎完全一样,唯一区别就是处理失败方式不同。
require
(PHP 4, PHP 5, PHP 7)
require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。
php-fpm
php5.4开始,php-fpm正式成为php进程管理工具,可以有效控制内存和进程、可以平滑重载PHP配置。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。
使用PHP-FPM来控制PHP-CGI的FastCGI进程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 启动php的fastcgi进程
--stop 强制终止php的fastcgi进程
--quit 平滑终止php的fastcgi进程
--restart 重启php的fastcgi进程
--reload 重新平滑加载php的php.ini
--logrotate 重新启用log文件
配置说明
php-fpm配置文件
1.listen, 接收fastCGI请求的地址
2.pm参数,表示master进程控制子进程的工作模式
1.pm=static,始终保持固定数量的worker进程数,不会动态扩容。由pm.max_children决定。
2.pm=dynamic,表示动态调整子进程数量,但是至少会有1个子进程。具体策略如下:
- pm.max_children :同一时刻最大子进程数。
- pm.start_servers :启动时创建的子进程数。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2
- pm.min_spare_servers:空闲状态子进程数量最小值,如果空闲进程数量少于这个值,则会创建子进程。
- pm.max_spare_servers:空闲状态子进程数量最小值,如果空闲进程数量多于这个值,则会杀死子进程。
启动php-fpm时会根据pm.start_servers初始worker进程数,运行期间会动态调整数量,通过定时器,动态检查闲置worker数量,按一定策略调整worker数量,增加或减少。
优缺点
优点:动态扩容与缩容,不浪费系统资源
缺点:所有worker都在工作,新来的请求会有可能等待1秒,直到新创建的worker成功。
3.pm=ondemand,初始时不启动worker,只有请求来了才按需创建。pm.process_idle_timeout参数决定了,空闲超过该值的子进程将被kill掉,默认10秒。同一时刻进程数最多不超过pm.max_children。
优点:按需创建,不浪费资源
缺点:由于php-fpm是短连接,若每次请求都需要创建连接,频繁创建连接会影响并发性能。
默认是dynamic,在性能与资源上做一个平衡。
3.php_admin_value[memory_limit]
内存大小,默认32M。
master-worker
php-fpm的master进程只是负责监听管理worker进程,worker进程负责接收请求和处理。
worker进程挂掉时会给master进程发信号,master进程接收到信号后会新建一个worker继续处理。