PHP官网:https://www.php.net/
环境说明
1
2
3
4
5
6
root@xjr-pc:/etc/init.d# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
安装:PHP 7.3.30 – 以及相关的扩展
linux 版本:Ubuntu 18.04.1 LTS
PHP版本:7.3.30
源码安装PHP
这里选择的是PHP7.3版本
下载PHP 7.3版本的源码包
PHP 官网不同历史版本下载地址:https://www.php.net/releases/
选择 php 版本 (这里我选择的是 PHP 7.3.30.tar.gz )
Linux 服务器上使用 **wget **进行下载
1
wget https://www.php.net/distributions/php-7.3.30.tar.gz
2.2. 安装PHP
解压源码包
1
2
3
4
root @xjr -pc: / home / xjr / src # tar -zxvf php-7.3.30.tar.gz
root @xjr -pc: / home / xjr / src # ls | grep "php"
php - 7.3 . 30
php - 7.3 . 30 . tar . gz
安装一些必要的依赖
注意:可能有些依赖是已经存在,但是php版本更高要求的依赖版本可能也会更高
如果本来就已经有对应的php,只是要安装多一个不同版本的php;可以先执行下面的预配置
根据不同的报错提示进行不同的处理;
1
2
3
4
sudo apt-get update
sudo apt-get install libxml2-dev
sudo apt-get install libsqlite3-dev
apt-get install libcurl4-gnutls -dev # 解决 curl 版本不对
php预配置
注意:修改安装目录
1
./configure --prefix=/usr/local/php/73 --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath -enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-xml --enable-zip --enable-pcntl --with-curl --with-fpm-user=nginx --enable-ftp --enable-session --enable-xml
参数说明:
--prefix=/usr/local/php
: 指定 PHP 的安装目录为 /usr/local/php
。
–with-config-file-scan-dir=PATH :指定扩展目录
–with-config-file-dir=PATH :指定配置目录
扩展支持
--with-curl
: 启用 CURL 支持。
--with-freetype-dir
: 指定 Freetype 库的目录。
--with-gd
: 启用 GD 图形库支持。
--with-gettext
: 启用 Gettext 支持。
--with-iconv-dir
: 指定 Iconv 库的目录。
--with-kerberos
: 启用 Kerberos 支持。
--with-libdir=lib64
: 指定库文件目录。
--with-libxml-dir
: 指定 LibXML 库的目录。
--with-mysqli
: 启用 MySQLi 扩展支持。
--with-openssl
: 启用 OpenSSL 支持。
--with-pcre-regex
: 启用 PCRE 正则表达式支持。
--with-pdo-mysql
: 启用 PDO MySQL 支持。
--with-pdo-sqlite
: 启用 PDO SQLite 支持。
--with-pear
: 启用 PEAR 支持。
--with-png-dir
: 指定 PNG 库的目录。
--with-xmlrpc
: 启用 XML-RPC 支持。
--with-xsl
: 启用 XSL 支持。
--with-zlib
: 启用 Zlib 支持。
其他功能
--enable-fpm
: 启用 FastCGI Process Manager (FPM)。
--enable-bcmath
: 启用 BCMath 扩展支持。
--enable-inline-optimization
: 启用内联优化。
--enable-gd-native-ttf
: 启用 GD 图库的 TrueType 字体支持。
--enable-mbregex
: 启用多字节正则表达式支持。
--enable-mbstring
: 启用多字节字符串支持。
--enable-opcache
: 启用 OPcache 支持。
--enable-pcntl
: 启用 PCNTL 支持。
--enable-shmop
: 启用 Shmop 支持。
--enable-soap
: 启用 SOAP 支持。
--enable-sockets
: 启用 Sockets 支持。
--enable-sysvsem
: 启用 System V 信号量支持。
--enable-xml
: 启用 XML 支持。
--enable-zip
: 启用 Zip 压缩支持。
--enable-pcntl
: 启用 PCNTL 支持。
--with-curl
: 启用 CURL 支持。
--with-fpm-user=nginx
: 指定 FPM 进程的运行用户。
--enable-ftp
: 启用 FTP 支持。
--enable-session
: 启用会话支持。
--enable-xml
: 启用 XML 支持。
PHP编译安装
1
2
3
4
5
root@xjr-pc:/home/xjr/src/php-7.3.30# pwd
/home/xjr/src/php-7.3.30
root@xjr-pc:/home/xjr/src/php-7.3.30# make
root@xjr-pc:/home/xjr/src/php-7.3.30# make install
添加环境变量
1
2
3
# 注意:这里使用的软连接
ln -s / www / server / php / 73 / bin / php / usr / bin / php7 . 3
ln -s / www / server / php / 73 / sbin / php-fpm / usr / bin / php-fpm7 . 3
添加php.ini配置
1
2
3
4
5
# 查看位置
php7 . 3 - -ini
# cp 到指定位置
cp php . ini-production / www / server / php / 73 / lib / php . ini
添加php-fpm配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[ global ]
pid = / www / server / php / 73 / var / run / php-fpm . pid
error_log = / www / server / php / 73 / var / log / php-fpm . log
log_level = notice
[ www ]
listen = / tmp / php-cgi - 73 . sock
listen . backlog = -1
listen . allowed_clients = 127.0 . 0 . 1
listen . owner = www
listen . group = www
listen . mode = 0666
user = www
group = www
pm = dynamic
pm . status_path = / phpfpm_73_status
pm . max_children = 150
pm . start_servers = 10
pm . min_spare_servers = 10
pm . max_spare_servers = 30
request_terminate_timeout = 100
request_slowlog_timeout = 30
slowlog = var / log / slow - 73 . log
添加php-fpm到systemctl管理
添加 **/etc/init.d **管理脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#! /bin/sh
### BEGIN INIT INFO
# Provides: php-fpm
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
prefix =/ www / server / php / 73
exec_prefix =${ prefix }
php_fpm_BIN =${ exec_prefix }/ sbin / php-fpm
php_fpm_CONF =${ prefix }/ etc / php-fpm . conf
php_fpm_PID =${ prefix }/ var / run / php-fpm . pid
php_opts = "--fpm-config $php_fpm_CONF --pid $php_fpm_PID "
wait_for_pid () {
try = 0
while test $try -lt 35 ; do
case " $1 " in
'created' )
if [ -f " $2 " ] ; then
try = ''
break
fi
;;
'removed' )
if [ ! -f " $2 " ] ; then
try = ''
break
fi
;;
esac
echo -n .
try =` expr $try + 1 `
sleep 1
done
}
case " $1 " in
start )
echo -n "Starting php-fpm "
$php_fpm_BIN - -daemonize $php_opts
if [ "$?" != 0 ] ; then
echo " failed"
exit 1
fi
wait_for_pid created $php_fpm_PID
if [ -n " $try " ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
stop )
echo -n "Gracefully shutting down php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -QUIT ` cat $php_fpm_PID `
wait_for_pid removed $php_fpm_PID
if [ -n " $try " ] ; then
echo " failed. Use force-quit"
exit 1
else
echo " done"
fi
;;
status )
if [ ! -r $php_fpm_PID ] ; then
echo "php-fpm is stopped"
exit 0
fi
PID =` cat $php_fpm_PID `
if ps -p $PID | grep -q $PID ; then
echo "php-fpm (pid $PID ) is running..."
else
echo "php-fpm dead but pid file exists"
fi
;;
force-quit )
echo -n "Terminating php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -TERM ` cat $php_fpm_PID `
wait_for_pid removed $php_fpm_PID
if [ -n " $try " ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;
restart )
$0 stop
$0 start
;;
reload )
echo -n "Reload service php-fpm "
if [ ! -r $php_fpm_PID ] ; then
echo "warning, no pid file found - php-fpm is not running ?"
exit 1
fi
kill -USR2 ` cat $php_fpm_PID `
echo " done"
;;
configtest )
$php_fpm_BIN -t
;;
*)
echo "Usage: $0 {start|stop|force-quit|restart|reload|status|configtest}"
exit 1
;;
esac
重新加载 systemctl 服务
1
systemctl daemon-reload
添加开机启动
1
systemctl enable php-fpm - 73 . service
PHP 扩展安装
具体的扩展可以根据项目需求安装
OPcache 缓存扩展
官网:https://www.php.net/manual/zh/book.opcache.php
作用:把php源码编译后进行缓存,php-fpm 进程共享缓存,加快每次请求的处理速度。
添加扩展
注意:因为我编译的时候已经编译了 OPcache 扩展
编辑:php.ini文件 (php –ini 可以查找目录位置 or phpinfo(); )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
zend_extension = opcache . so
[ opcache ]
opcache . enable = 1
opcache . enable_cli = 0
opcache . memory_consumption = 128
opcache . interned_strings_buffer = 16
opcache . max_accelerated_files = 130987
opcache . revalidate_freq = 3600
opcache . fast_shutdown = 1
opcache . validate_timestamps = 1
配置说明
官网配置说明:
PHP: 运行时配置 - Manual
opcache.enable
**opcache.enable **: 启用操作码缓存。如果禁用此选项,则不会优化和缓存代码。(0:关闭 ; 1 :启动)
opcache.enable_cli
**opcache.enable_cli : **是否允许在 cli 模式下使用 (0:关闭 ; 1 :启动)– 个人感觉脚本模式要么就是常驻进程,要么就是执行频率不高,所以其实没必要开,反而容易造成奇怪现象
opcache.memory_consumption
**opcache.memory_consumption : **OPcache 的共享内存大小,以兆(M)为单位
我们计算 memory_consumption 的公式为: ( used_memory + free_memory + wasted_memory) / 1048576
1
opcache . memory_consumption = 128
opcache.interned_strings_buffer
**opcache.interned_strings_buffer :**用来存储预留字符串的内存大小,以兆字节为单位
默认情况中,这个优化只会存在于单个PHP-FPM进程中,如果设置了这个选项,将会在所有 PHP-FPM 进程中共享。在比较大的项目中,这可以非常有效地节约内存,提高应用的性能
1
2
3
4
5
# 官方默认配置是 8 M
opcache . interned_strings_buffer = 8
# 项目比较大,可以适当调大
opcache . interned_strings_buffer = 16
opcache.max_accelerated_files
opcache.max_accelerated_files : OPcache 哈希表中可存储的脚本文件数量上限。 真实的取值是在质数集合 { 223, 463, 983, 1979, 3907, 7963, 16229, 32531, 65407, 130987 } 中找到的第一个大于等于设置值的质数。 设置值取值范围最小值是 200,最大值在 PHP 5.5.6 之前是 100000,PHP 5.5.6 及之后是 1000000。
配置要保存在内存中的文件数,我们可以通过以下命令在获取整个项目中的php文件数。(可以根据项目的文件数,在上面的 质数集合中选取 >= 的第一个质数。)
注意:php-fpm 是共用opcache的,所以这个要找的是全部项目的总数
1
find . -type f -print | grep php | wc -l
opcache.revalidate_freq
opcache.revalidate_freq : 这个选项用于设置缓存的过期时间 (单位是秒), 当这个时间达到后, opcache 会检查你的代码是否改变, 如果改变了 PHP 会重新编译它, 生成新的opcode, 并且更新缓存. 值为 “0” 表示每次请求都会检查你的 PHP 代码是否更新(这意味着会增加很多次stat系统调用, 译注: stat系统调用是读取文件的状态, 这里主要是获取最近修改时间, 这个系统调用会发生磁盘I/O, 所以必然会消耗一些CPU时间, 当然系统调用本身也会消耗一些CPU时间). 可以在开发环境中把它设置为0;
1
opcache . revalidate_freq = 3600
opcache.fast_shutdown
opcache.fast_shutdown : 它的作用是在单个请求结束时提供一种更快速的机制来调用代码中的析构器, 从而加快 PHP 的响应速度和 PHP 进程资源的回收速度, 这样应用程序可以更快速地响应下一个请求. 把它设置为 1 就可以使用这个机制了. (php 7.2 以后就移除了这个配置,因为默认开启了)
1
opcache . fast_shutdown = 1
opcache.validate_timestamps
opcache.validate_timestamps : 当这个选项被启用(设置为1), PHP会在 opcache.revalidate_freq 设置的时间到达后检测文件的时间戳(timestamp).
如果这个选项被禁用(设置为0), opcache.revalidate_freq 会被忽略, PHP 文件永远不会被检查. 这意味着如果你修改了你的代码, 然后你把它更新到服务器上, 再在浏览器上请求更新的代码对应的功能, 你会看不到更新的效果, 你必须得重新加载你的 PHP (使用 kill -SIGUSR2 强制重新加载).
1
opcache . validate_timestamps = 1
Bcmatch 扩展
大多数编程语言对于浮点型数据格式遵循 IEEE 754 标准,PHP 也不例外,这就会导致在使用浮点数运算的过程中会有精度丢失的问题。PHP提供了BCMath库来支持更加精确的计算。但是我的PHP在编译时并没有安装 **BCMath **库,如果需要安装在编译安装时指定–**enable-bcmath **即可。如果在编译安装时漏掉了,我们也可以对BCMath库单独进行安装
添加扩展
⭐️ **注意:**源码包中一般会有 Bcmathch 扩展的源码
进入PHP 源码包目录下的 ext/bcmatch 目录 (我的目录是 /home/ubuntu/src/php-7.3.30/ext ) 。
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.进入扩展的源码包
cd /home/ubuntu/src/php-7.3.30/ext/bcmath
# 2. 执行 phpize
/usr/local/php/73/bin/phpize
# 3. 预编译
./configure --with-php-config= /usr/local/php/73/bin/php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php.ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = bcmath.so
# 6. 查看结果
php -m | grep "bcmath"
# 7. 重启 php-fpm
systemctl restart php-fpm
exif 扩展
**Exif **是指交换图像文件格式(Exchangeable Image File Format),它是为图片存储设备制定的一种标准格式。Exif扩展是在PHP中读取和操作Exif数据的工具。通过使用Exif扩展,我们可以获取照片的元数据,包括相机参数、拍摄时间、地理位置等信息,如果需要安装在编译安装时指定–**enable-exif **即可。如果在编译安装时漏掉了,我们也可以库单独进行安装
添加扩展
⭐️ **注意:**源码包中一般会有 exif 扩展的源码
进入PHP 源码包目录下的 ext/exif 目录 (我的目录是 /home/ubuntu/src/php-7.3.30/ext ) 。
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.进入扩展的源码包
cd /home/ubuntu/src/php-7.3.30/ext/exif
# 2. 执行 phpize
/usr/local/php/73/bin/phpize
# 3. 预编译
./configure --with-php-config= /usr/local/php/73/bin/php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php.ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = exif.so
# 6. 查看结果
php -m | grep "exif"
# 7. 重启 php-fpm
systemctl restart php-fpm
mcrypt 扩展
mcrypt扩展的主要问题是,它是基于libmcrypt的,自2007年开始就没有开发过。因此,即使libmcrypt还在使用,但是由于缺乏适当的开发和维护,库的安全问题已经成为许多系统管理员关注的焦点。
由于mcrypt扩展开发的结束,扩展也从PHP 7.2中删除,并转移到一个非官方的PECL存储库中。但是,你仍然可以在PHP 5.4到PHP 7.1中找到mcrypt扩展。PHP 7.2已经发布,但是它不包含mcrypt扩展。对于PHP 7.2+, PHP使用libsodium作为加密库
添加扩展
⭐️ **注意:**源码包中已经移除了 mcrypt 扩展的源码, 所以需要自行下载
下载地址:
PECL :: Package :: mcrypt
下载mcrypt 源码包,完成解压。(注意php 和mcrypt 扩展的兼用版本)
下载安装 libmcrypt . (mcrypt 要依赖于 libmcrypt )
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 0. libmcrypt下载并安装
wget http : // nchc . dl . sourceforge . net / project / mcrypt / Libmcrypt / 2.5 . 8 / libmcrypt - 2.5 . 8 . tar . gz
tar -zxvf libmcrypt - 2.5 . 8 . tar . gz
./ configure - -prefix =/ usr / local
make && make install
# 1.下载并解压扩展的源码包 (注意php和mcrypt扩展的兼用版本)
wget https : // pecl . php . net / get / mcrypt - 1.0 . 6 . tgz
tar -zxvf mcrypt - 1.0 . 6 . tgz
cd mcrypt - 1.0 . 6
# 2. 执行 phpize
/ usr / local / php / 73 / bin / phpize
# 3. 预编译
./ configure - -with-php-config =/ usr / local / php / 73 / bin / php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php . ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = mcrypt . so
# 6. 查看结果
php -m | grep "mcrypt"
# 7. 重启 php-fpm
systemctl restart php-fpm
Phar 扩展
**Phar **是 PHP Archive 的缩写,它可以将多个PHP文件和资源打包成单个文件,方便进行分发和管理。
如果需要安装在编译安装时指定–**enable-phar **即可。如果在编译安装时漏掉了,我们也可以库单独进行安装
添加扩展
⭐️ **注意:**源码包中一般会有 phar 扩展的源码
进入PHP 源码包目录下的 ext/exif 目录 (我的目录是 /home/ubuntu/src/php-7.3.30/ext ) 。
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.进入扩展的源码包
cd /home/ubuntu/src/php-7.3.30/ext/phar
# 2. 执行 phpize
/usr/local/php/73/bin/phpize
# 3. 预编译
./configure --with-php-config= /usr/local/php/73/bin/php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php.ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = phar.so
# 6. 查看结果
php -m | grep "phar"
# 7. 重启 php-fpm
systemctl restart php-fpm
redis 扩展
redis 扩展: 用于php连接并操作redis服务
添加扩展
⭐️ **注意:**源码包中并没有 redis 扩展的源码包;需要自行下载
官网下载地址:
PECL :: Package :: redis
下载redis 扩展源码包,解压 。
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1.下载扩展的源码包,解压
wget https://pecl.php.net/get/redis-6.0.0.tgz
tar -zxvf redis-6.0.0.tgz
cd redis-6.0.0.tgz
# 2. 执行 phpize
/usr/local/php/73/bin/phpize
# 3. 预编译
./configure --with-php-config= /usr/local/php/73/bin/php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php.ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = redis.so
# 6. 查看结果
php -m | grep "redis"
# 7. 重启 php-fpm
systemctl restart php-fpm
sysvmsg 扩展
**php **采用 **sysvmsg **扩展完成进程间通信的消息队列
如果需要安装在编译安装时指定–**enable-phar **即可。如果在编译安装时漏掉了,我们也可以库单独进行安装
添加扩展
⭐️ **注意:**源码包中一般会有 sysvmsg 扩展的源码
进入PHP 源码包目录下的 ext/exif 目录 (我的目录是 /home/ubuntu/src/php-7.3.30/ext ) 。
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.进入扩展的源码包
cd /home/ubuntu/src/php-7.3.30/ext/sysvmsg
# 2. 执行 phpize
/usr/local/php/73/bin/phpize
# 3. 预编译
./configure --with-php-config= /usr/local/php/73/bin/php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php.ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = sysvmsg.so
# 6. 查看结果
php -m | grep "sysvmsg"
# 7. 重启 php-fpm
systemctl restart php-fpm
wddx 扩展
PHP 编译时加入了 WDDX 支持,则只能用 WDDX,WDDX从PHP 7.4版本后开始弃用。从 PHP 5.5.4 起可以使用 php_serialize。 php_serialize 在内部简单地直接使用 serialize/unserialize 函数,并且不会有 php 和 php_binary 所具有的限制
如果需要安装在编译安装时指定–**enable-wwdx **即可。如果在编译安装时漏掉了,我们也可以库单独进行安装
添加扩展
⭐️ **注意:**源码包中一般会有 wddx 扩展的源码
进入PHP 源码包目录下的 ext/exif 目录 (我的目录是 /home/ubuntu/src/php-7.3.30/ext ) 。
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1.进入扩展的源码包
cd /home/ubuntu/src/php-7.3.30/ext/wddx
# 2. 执行 phpize
/usr/local/php/73/bin/phpize
# 3. 预编译
./configure --with-php-config= /usr/local/php/73/bin/php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php.ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = wddx.so
# 6. 查看结果
php -m | grep "wddx"
# 7. 重启 php-fpm
systemctl restart php-fpm
swoole 扩展
Swoole 官网:
Swoole - PHP 协程框架
Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无二的可能性。Swoole 可以广泛应用于互联网、移动通信、云计算、 网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
添加扩展
⭐️ **注意:**源码包中没有swoole源码,需要自行下载
下载地址:
下载
下载swoole 源码包,完成解压。(注意php 和swoole 扩展的兼用版本)
4.8 版本需要 php-7.2 或更高版本
5.0 版本需要 php-8.0 或更高版本
执行 **phpize **命令,**phpize **命令在 **PHP **安装目录的 **bin 目录下( 我的目录是 /usr/local/php/73/bin/phpize **)
预编译
编译安装
更新 php.ini
重启 php-fpm 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1.下载并解压扩展的源码包 (注意php和swoole扩展的兼用版本)
wget https : // github . com / swoole / swoole-src / archive / refs / tags / v4 . 8 . 13 . tar . gz
mv v4 . 8 . 13 . tar . gz swoole-v4 . 8 . 13 . tar . gz
tar -xvf swoole-v4 . 8 . 13 . tar . gz
cd swoole-src - 4.8 . 13
# 2. 执行 phpize
/ usr / local / php / 73 / bin / phpize
# 3. 预编译
./ configure - -with-php-config =/ usr / local / php / 73 / bin / php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php . ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = swoole . so
# 6. 查看结果
php -m | grep "swoole"
# 7. 重启 php-fpm
systemctl restart php-fpm
wkhtmltox 扩展
wkhtmltopdf 官网:
https://wkhtmltopdf.org/
依赖于开源软件: wkhtmltox 软件,实现把 html 页面(线上 or 线下)转化成 pdf ,png等格式;
依赖软件安装
官网上下载对应版本的 wkhtmltopdf 软件: wkhtmltopdf
⭐️ **注意:**根据自己情况选择合适的版本
1
2
3
4
5
6
# 安装软件
sudo apt-get install xvfb
sudo apt-get install wkhtmltopdf
# 验证
wkhtmltopdf http : // www . baidu . com baidu . pdf
php扩展编译安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 1.下载并解压扩展的源码包 (注意php和swoole扩展的兼用版本)
git clone https : // github . com / krakjoe / wkhtmltox
# 2. 执行 phpize
/ usr / local / php / 73 / bin / phpize
# 3. 预编译
./ configure - -with-php-config =/ usr / local / php / 73 / bin / php-config
# 4. 编译 && 安装
make && make install
# 5. 修改配置文件 (extension_dir: 编译后的 .so 文件位置)
vim php . ini
extension_dir = "/usr/local/php/73/lib/php/extensions/no-debug-non-zts-20180731/"
extension = wkhtmltox . so
# 6. 查看结果
php -m | grep "wkhtmltox"
# 7. 重启 php-fpm
systemctl restart php-fpm