分类 php 下的文章

当业务中需要存储大文本,比如文章内容、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

新加4个标量类型声明

php7之前已经存在的函数参数类型有:class,self,array,callable
php7之后新加入的有:bool,float,int,string,object


- 阅读剩余部分 -

本文转自 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,require很少,因为它也说了,用法几乎完全一样,唯一区别就是处理失败方式不同。

require

(PHP 4, PHP 5, PHP 7)

require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而 include 只产生警告(E_WARNING),脚本会继续运行。

- 阅读剩余部分 -

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继续处理。