- P-01) 系统 &环境
- P-02) 安装前准备
- P-03) 编译安装【oniguruma】
- P-04) 编译安装【libzip】
- P-05) 安装依赖
- P-06) 编译安装【libxml2】
- P-07) 编译安装【libmcrypt】
- P-08) 编译安装【mhash】
- P-09) 编译安装【mcrypt】
- P-10) 编译安装【 jpeg6】
- P-11) 编译安装【libpng】
- P-12) 编译安装【freetype】
- P-13) 编译安装【php-8.0.9】
- P-14) 配置【php】环境变量
- P-15) 配置【Apache】以支持【php】
- P-16) 配置 【Nginx】 以支持 【php】
- P-17) 配置【php-fpm】启动
- P-18) 配置 【php-fpm】启动脚本
- P-19) 配置 【php-fpm】至【system】启动
- P-20) 脚本 & 进程启停 & 重载 【php-fpm】
- P-21) 设置 【php-fpm】开机自启动
- P-22)安装【PHP】扩展 & 模块
- P-23)编译安装 【memcached】服务:
- P-24)编译安装【Redis】服务
- P-25)开启【PHP】加速缓存模块:
- P-26)安装【PHP】依赖管理工具【Composer】
P-01) 系统 &环境
运行环境:实验室虚拟环境
系统型号:CtenOS-8.4-x86_64
Linux版本:linux-8-x86_64
CPU&内存:4H + 4GB
系统内核:
uname -r4.18.0-305.10.2.el8_4.x86_64
P-02) 安装前准备
- 1 已安装
Apache,查看安装的版本。源码编译安装【Apache】的方法请参阅……
apachectl -v
httpd -v
- 2 已安装
Nginx,查看安装的版本。源码编译安装【Ninux】的方法请参阅……
nginx -v
- 3 已安装
MySQL,查看安装的版本。源码编译安装【MySQL】的方法请参阅……
mysql -V
status
- 4 更新
CentOS-8*软件包:
dnf update
yum install epel-release
- 5 新建
php源码包 & 扩展文件存放目录:
mkdir lanmpp
cd /root/lanmpp
mkdir php8
cd php8/
P-03) 编译安装【oniguruma】
- 安装
oniguruma所需的工具&依赖:
yum -y install autoconf automake libtool make gcc gcc-c++ vim wget
- 下载
oniguruma:
wget https://github.com/kkos/oniguruma/archive/refs/tags/v6.9.7.1.tar.gz -O oniguruma-6.9.7.1.tar.gz
- 编译安装
oniguruma:
tar -xf oniguruma-6.9.7.1.tar.gz
rm -rf oniguruma-6.9.7.1.tar.gz
cd oniguruma*/
./autogen.sh && ./configure --prefix=/usr
make && make install
P-04) 编译安装【libzip】
- 安装
libzip-devel不用指定安装目录:
cd ..
wget https://libzip.org/download/libzip-1.8.0.tar.gz
tar -xvf libzip-1.8.0.tar.gz
rm -rf libzip-1.8.0.tar.gz
cd libzip*/
- 由于是最新版的
libzip,需要用cmake的方式才能编译安装,所以,得先安装上cmake3:
yum -y install cmake3
cmake --version
cmake version 3.20.2
- 使用
cmake3编译安装libzip:
mkdir build && cd build
cmake3 ..
make && make install
- 配置
libzip环境变量
echo export PATH=$PATH:/usr/local/bin/zipcmp >>/etc/profile
source /etc/profile
P-05) 安装依赖
yum -y install bzip2 bzip2-devel curl curl-devel nano net-tools lsof gmp-devel libcurl libcurl-devel libXpm-devel libc-client-devel libicu-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libicu-devel libxslt libxslt-devel libxml2-devel libedit openldap openldap-devel openssl openssl-devel postgresql-devel net-snmp-devel readline readline-devel unixODBC-devel mysql-devel sqlite-devel
- 说明:有几包扩展主包采用的编译安装,所以,在依赖安装列表中没有显示,若你不采取编译安装,则需要添加进去…
P-06) 编译安装【libxml2】
cd /root/lnampp/php8
wget ftp://xmlsoft.org/libxml2/libxml2-2.9.12.tar.gz
tar -xvf libxml2-2.9.12.tar.gz
rm -rf libxml2-2.9.12.tar.gz
cd libxml2*/
./configure --prefix=/usr/local/libxml2/
make && make install
P-07) 编译安装【libmcrypt】
cd ..
wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar -xvf libmcrypt-2.5.8.tar.gz
rm -rf libmcrypt-2.5.8.tar.gz
cd libmcrypt*/
./configure --prefix=/usr/local/libmcrypt/
make && make install
- 安装【libltdl】源码就在【libmcrypt】源码目录中:
cd libltdl/
./configure --enable-ltdl-install
make && make install
P-08) 编译安装【mhash】
- 不用指定安装目录
cd /root/lnampp/php8
wget https://jztkft.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
tar -xf mhash-0.9.9.9.tar.gz
rm -rf mhash-0.9.9.9.tar.gz
cd mhash*/
./configure
make && make install
P-09) 编译安装【mcrypt】
cd ..
wget https://udomain.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
tar -xvf mcrypt-2.6.8.tar.gz
rm -rf mcrypt-2.6.8.tar.gz
cd mcrypt*/
export LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib
./configure --with-libmcrypt-prefix=/usr/local/libmcrypt
make && make install
- 说明:环境变量设置:【LD_LIBRARY_PATH】用于指定【libmcrypt】和【mhash】的库的位置
P-10) 编译安装【 jpeg6】
cd ..
wget http://ijg.org/files/jpegsrc.v9d.tar.gz
tar -xvf jpegsrc.v9d.tar.gz
rm -rf jpegsrc.v9d.tar.gz
cd jpeg-9d/
./configure --prefix=/usr/local/jpeg9/ --enable-shared --enable-static
make && make install
- 说明:【–enable-shared】与【–enable-static】参数,分别为建立共享库和静态库使用的【libtool】。
P-11) 编译安装【libpng】
cd ..
wget https://nav.dl.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.gz
tar -xvf libpng-1.6.37.tar.gz
rm -rf libpng-1.6.37.tar.gz
cd libpng*/
./configure --prefix=/usr/local/libpng
make && make install
P-12) 编译安装【freetype】
cd ..
wget https://bigsearcher.com/mirrors/nongnu/freetype/freetype-2.11.0.tar.gz
tar -xvf freetype-2.11.0.tar.gz
rm -rf freetype-2.11.0.tar.gz
cd freetype*/
./configure --prefix=/usr/local/freetype/
make && make install
P-13) 编译安装【php-8.0.9】
- 下载 & 解压
php源码包:
cd ..
wget https://www.php.net/distributions/php-8.0.9.tar.gz
tar -xvf php-8.0.9.tar.gz
rm -rf php-8.0.9.tar.gz
cd php*/
- 预编译 & 生成配置(
CentOS原装镜像源下),应该会报错…
configure: error: Package requirements (libedit) were not met:
- 之前是有安装
libedit的,只是其扩展包libedit-devel,由于系统源中无此包,只能通过国外镜像来解决…
dnf --enablerepo=powertools install libedit-devel
- 预编译 & 生成配置
php:
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-config-file-scan-dir=/usr/local/php/etc/conf.d \
--with-config-file-scan-dir=/usr/local/php/etc/php.d \
--with-libxml-dir=/usr/local/libxml2 \
--with-jpeg-dir=/usr/local/jpeg9 \
--with-png-dir=/usr/local/libpng \
--with-freetype-dir=/usr/local/freetype \
--with-mcrypt=/usr/local/libmcrypt \
--with-pdo-mysql=/usr/local/mysql \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql
--with-fpm-user=www \
--with-fpm-group=www \
--with-apache=DIR \
--with-nginx=DIR \
--with-mysql=DIR \
--with-bz2 \
--with-curl \
--with-curlwrappers \
--with-gd \
--with-gettext \
--with-imap-ssl \
--with-kerberos \
--with-libedit \
--with-mhash \
--with-mysqli \
--with-openssl \
--with-pear \
--with-readline \
--with-tidy \
--with-xsl \
--with-xmlrpc \
--with-zlib \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-openssl-dir \
--with-iconv-dir \
--with-libxml-dir \
--with-zlib-dir \
--without-gdbm \
--with-ldap=shared \
--disable-cgi \
--disable-rpath \
--disable-short-tags \
--disable-debug \
--disable-fileinfo \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-fpm \
--enable-gd \
--enable-gd-jis-conv \
--enable-intl \
--enable-inline-optimization \
--enable-libxml \
--enable-mbregex \
--enable-mbstring=all \
--enable-mysqlnd \
--enable-mysqlnd-compression-support \
--enable-gd-jis-conv \
--enable-inline-optimizatio \
--enable-maintainer-zts \
--enable-opcache \
--enable-pcntl \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvshm \
--enable-sysvsem \
--enable-shmop \
--enable-soap \
--enable-sysvshm \
--enable-wddx \
--enable-xml \
--enable-zip
- 预编译 & 生成配置(
阿里云镜像源下)报错…(这里只是举例)…
configure: error: Package requirements (libxml-2.0 >= 2.9.0) were not met:
Package 'libxml-2.0', required by 'virtual:world', not found
- 解决方法:
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/libxml2/lib/pkgconfig"

- 出现上图界面后,方能进行编译、测试 & 安装
php:
make -j 6
make test
make install
- 说明:测试环节
make test,可以不执行,(共测试14749个文件)…
P-14) 配置【php】环境变量
- 1 添加
php至系统环境变量中:
echo export PATH=$PATH:/usr/local/php/bin >>/etc/profile
#或者编辑...
vim /etc/profile
#末行加入...
export PATH=$PATH:/usr/local/php/bin
#让设置生效...
source /etc/profile
- 查看
php安装的版本:
php -v
#以下是打印结果...
PHP 8.0.9 (cli) (built: Aug 9 2021 08:45:39) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologies
#或者执行以下命令,打印结果都一样...
php --version
- 或者创建
php映射软连接:
ln -s /usr/local/php/bin/ /usr/bin/php
- 2 生成配置文件
php.ini:
cp /root/lanmpp/php8/php-8.0.9/php.ini-production /usr/local/php/etc/php.ini
ls /usr/local/php/etc
pear.conf php-fpm.conf.default php-fpm.d php.ini
P-15) 配置【Apache】以支持【php】
- 1 创建用户 & 组并限制系统登录:
useradd --shell /sbin/nologin -g www www
- 2 修改
Apache配置文件httpd.conf,以支持对*.php页面进行解析…
vim /usr/local/apache2/etc/httpd.conf
- 原字段内容:(195-200行之间):
#ServerName localhost:80
- 去掉前面的注释符【#】,将【localhost】换成你的服务器【IP】或域名:示例…
ServerName 123.123.123.0:80
#或......
ServerName mytest.com:80
- 将
Require all denied改为Require all granted:- 原文件字段内容(200-210行之间):
<Directory />
AllowOverride none
Require all denied
</Directory>
- 修改成…
<Directory />
AllowOverride none
Require all granted
</Directory>
- 在模块
<IfModule mime_module>之间添加</IfModule>:
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .php8
AddType application/x-httpd-php-source .phps
- 增加索引页
index.php,在模块<IfModule dir_module>之间添加</IfModule>: - 原字段内容(250-260行之间):
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
- 修改成…
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
- 检查是否加载
php的模块:
/usr/local/apache2/bin/apachectl -M
- 打印信息中,如有如下信息,则证明
libphp.so模块已被加载…
php_module (shared)
- 若无
libphp.so的模块,那么检查是否有php模块的文件libphp.so:
ls /usr/local/apache2/modules/libphp.so
#=======================================
#/usr/local/apache2/modules/libphp.so
- 若有
libphp8.so文件,则检查在httpd.cnf配置文件中是否加载…
LoadModule php_module modules/libphp.so
- 修改
apache用户 & 属组 - 原字段(160-170行之间):
User daemon
Group daemon
- 修改成…
User www
Group www
- 3 启动【apache】测试【php】
apache网站根目录htdocs下,新建php测试内容文件phpinfo.php:
vim /usr/local/apache2/htdocs/phpinfo.php
<?php
phpinfo();
?>
- 重启
apache:
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
- 打开浏览器,访问
phpinfo.php…

- OK!【apache】配置支持【php】成功😊😊😊!!!
P-16) 配置 【Nginx】 以支持 【php】
- 1 修改配置文件
nginx.conf:
vim /usr/local/nginx/nginx.conf
php位置模块,原字段(60-75行之间):
- 修改成…
location ~ \.php$ {
root /usr/local/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
server模块,原字段(40-48行之间):
location / {
root html;
index index.html index.htm;
}
- 修改成…
location / {
root html;
index index.php index.html index.htm;
}
- 2
nginx重新载入…
nginx -s reload
- 3 开启 & 放行
php【9000】端口:
- 安装
iptables防火墙:
yum install iptables-services
- 编辑防火墙配置文件
iptables,开启 & 放行php【9000】端口:
vim /etc/sysconfig/iptables
#将如下字段添加到相应的端口位置中...
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
#保存退出...
:wq

- 重启【iptables】生效配置:
systemctl restart iptables.service #重启【iptables】生效配置
systemctl enable iptables.service #设置【iptables】开机自启动
/usr/libexec/iptables/iptables.init restart #重置【iptables】
- 4 查看 & 确认是否开启【9000】监听端口:
netstat -tnl
- 经查看,【9000】端口并未开启,这是因为,虽然
phpinfo.php在apache中能成功运行(因为它只是一个php页面而已)。但自身并未启动,所以还得继续配置…
P-17) 配置【php-fpm】启动
- 1 生成
www.conf配置文件并修改:
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
vim /usr/local/php/etc/php-fpm.d/www.conf
user = www
group = www
pm = dynamic #【动态模式开启】
pm.start_servers = 20 #系统预设默认:pm.start_servers = 2【子进程数】
pm.min_spare_servers = 5 #系统预设默认:pm.min_spare_servers = 1【最小控程数,节省访问请求时间】
pm.max_spare_servers = 35 #系统预设默认:pm.max_spare_servers = 3【最大空闲进程数】
pm.max_children = 50 #系统预设默认:pm.max_children = 5【最大的进程数】
pm.max_requests = 500 #系统预设默认:;pm.max_requests = 500【垃圾冗余处理】
request_slowlog_timeout = 1 #系统预设默认:;request_slowlog_timeout = 0【慢查询超时设置】
request_terminate_timeout = 900 #系统预设默认:;request_terminate_timeout = 0【请求终止链接超时设置】
slowlog = /opt/$pool.log.slow #系统预设默认:;slowlog = /log/$pool.log.slow
- 2 修改
www.conf配置文件,以启动慢查询测试页面功能,路径可自定义:
vim /usr/local/php/etc/php-fpm.d/www.conf
pm.status_path = /php_status
#系统预设默认:;pm.status_path = /status【启动慢查询测试页面功能】路径可自定义,但两个文件中的【status】名要相同...
- 修改
nginx配置文件nginx.conf:
vim /usr/local/nginx/nginx.conf
#将
location ~ \.php$ {
#改为
location = /php_status {
nginx重新载入…
nginx -s reload
- 打开浏览器访问 http://mhy.com:8088/php_status

- 2 为
php-fpm提供配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
- 3 配置 & 修改
php.ini文件:
vim /usr/local/php/etc/php.ini
post_max_size = 256M #系统预设默认:post_max_size = 8M
upload_max_filesize = 256M #系统预设默认:upload_max_filesize = 2M
- 4 启动
php-fpm:
/usr/local/php/sbin/php-fpm
- 再次查看 & 确认【9000】端口监听状态:
netstat -an | grep 9000
#【php-fpm】启动成功,【9000】端口已开启...
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
- 5
nginx测试test.php页面:
vim /usr/local/nginx/html/test.php
<?php
echo "php 😊 hello world!";
?>
nginx重新载入…
nginx -s reload
- 打开浏览器访问…

- OK!【Nginx】配置支持【php】成功😊😊😊!
P-18) 配置 【php-fpm】启动脚本
- 查找 & 拷贝
php-fpm脚本文件:
find / -name 'init.d.php-fpm'
--------------------------------------------------------------------------
cp /root/lanmpp/php8/php-8.0.9/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
- 赋予
php-fpm脚本可执行权限:
chmod a+x /etc/init.d/php-fpm
- 执行脚本启动
php-fpm:
/usr/local/php/sbin/php-fpm
P-19) 配置 【php-fpm】至【system】启动
- 1 创建
php-fpm服务文件php-fpm.service:
vim /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 重载
system配置:
systemctl daemon-reload
- 2
system方式启动php-fpm服务:
php-fpm start
service php-fpm start
systemctl start php-fpm
systemctl start php-fpm.service
- 注意:若遇报错 。
- 或: 错误:FPM初始化失败……
- 则需先停止
php-fpm进程,然后再执行启动命令…
killall php-fpm
- 3 停止
php-fpm服务:
php-fpm stop #服务帮助,安装软件包“php-fpm”以提供命令“php-fpm”? [N/y] n,可选择暂时不安装...
systemctl stop php-fpm
systemctl stop php-fpm.service
- 4 重载
php-fpm服务:
systemctl daemon-reload
systemctl restart php-fpm
systemctl restart php-fpm.service
- 5 重启
php-fpm服务:
php-fpm restart
service php-fpm restart
systemctl restart php-fpm
P-20) 脚本 & 进程启停 & 重载 【php-fpm】
- 1 启动
php-fpm:
php-fpm -R
/etc/init.d/php-fpm start
/usr/local/php/sbin/php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
- 2 停止 & 关闭
php-fpm:
/etc/init.d/php-fpm stop
killall php-fpm
pkill php-fpm
kill -INT cat /usr/local/php/var/run/php-fpm.pid
- 3 重载 & 重启
php-fpm:
/etc/init.d/php-fpm reload
/etc/init.d/php-fpm restart
kill -USR2
/usr/local/php/sbin/php-fpm &
kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
- 说明:提示暂时不安装的项目,只是担心与
php不匹配,从而影响安装扩展。待扩展安装完成了,再行安装php-fpm…
- 4 查看
php-fpm服务 & 进程状态:
systemctl status php-fpm -l
systemctl status php-fpm
systemctl status php-fpm.service
service php-fpm status
- 5 设置
php-fpm开机自启动
systemctl enable php-fpm
----------------------------------
/usr/lib/systemd/systemd-sysv-install enable php-fpm
- 禁止开机自启动
systemctl didable php-fpm
P-21) 设置 【php-fpm】开机自启动
- 将
php-fpm服务加入chkconfig系统service管理序列中…
chkconfig --add /etc/init.d/php-fpm
chkconfig php-fpm on
/usr/lib/systemd/systemd-sysv-install enable php-fpm
chkconfig --list php-fpm
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
php-fpm 0:关 1:关 2:开 3:开 4:开 5:开 6:关
- OK!
php-fpm开机自行启动设置成功! - 重启服务器主机…
reboot
- 查看
php-fpm服务状态(确认是否已自行启动)…
systemctl status php-fpm.service
systemctl status php-fpm -l

P-22【PHP】测试 & 已安装模块检测:
cd /usr/local/php/bin
ls
pear peardev pecl phar phar.phar php php-config phpdbg phpize
------------------------------
vim test.php
------------------------------
<?php
echo "this is a test \n";
:wq
------------------------------
/usr/local/php/bin/php test.php
this is a test #打印输出的结果:这是一个测试...
`/usr/local/php/bin/php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
intl
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
sysvshm
tokenizer
xml
xmlreader
xmlwriter
xsl
zlib
[Zend Modules]
#经查发现还有N个模块没装...`

* 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
- 内测
apache网站根目录下的test.php文件:
cd /usr/local/apache2/htdocs
vim test.php
--------------------------------------------
<?php
for($i=0; $i<10; $i++) {
echo "===== {$i} <br>\n";
}
:wq
--------------------------------------------
/usr/local/php/bin/php test.php
cat test.php

- OK!内测成功!
- 再通过浏览器,用
apache执行:

- OK!
php文件挂载apache成功…这一步实际是多余的,因为测试过phpinfo.php配置文件,只是想再测试一下代码文件!
P-22)安装【PHP】扩展 & 模块

22.1 编译安装 imagemagick :
cd /root/lanmpp/php8
wget https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.1.0-4.tar.gz
tar -xvf ImageMagick-7.1.0-4.tar.gz
rm -rf ImageMagick-7.1.0-4.tar.gz
cd ImageMagick*/
./configure --prefix=/usr/local/ImageMagick --enable-shared --enable-lzw --enable-modules --without-perl
make && make install
make check
- 核验版本,查看安装是否成功…
convert -version
//*打印信息......
Version: ImageMagick 6.9.10-86 Q16 x86_64 2020-01-13 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
imagemagick环境变量设置:
export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/
- 2
phpize方式安装imagick:
phpize是用来扩展php模块的,通过它可建立php所有内置的 & 外挂的模块。- 若没安装
autoconf工具 ,刚需要安装,其作用是在执行phpize时,生成configure可执行文件: Autoconf是一个用于生成shell脚本的工具,功能强大,并能跨平台自动配置软件源代码,以适应多种类似POSIX的系统。极其方便的让我们想使用的软件包,能在所有的不同系统中,均能进行编译。
- 若没安装
yum -y install autoconf
yum -y install ImageMagick-devel
cd ..
wget https://pecl.php.net/get/imagick-3.5.1.tgz
tar -xvf imagick-3.5.1.tgz
rm -rf imagick-3.5.1.tgz
cd imagick*/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
./configure --prefix=/usr/local/php/lib/php/extensions --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick
make && make install
- 执行完
make install安装后,会自动生成新安装php扩展模块的扩展目录:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
ls /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
imagick.so opcache.so
#可以看到该目录中,已经有了【imagick.so】这个模块...
- 配置
php挂载支持imagick:
vim /usr/local/php/etc/php.ini
#搜索关键词...
?extension
e/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NuZ2Vl,size_16,color_FFFFFF,t_70#pic_center)
php扩展模块目录大约在php.ini(950-970行之间),将新装模块目录放到结尾处…将extension=imagick.so模块添入其中…
extension_dir="usr/local/php/lib/php/extensions/no-debug-zts-20200930/" /*添加这个目录*/
extension="imagick.so"

:wq保存退出!通过浏览器查看phpinfo.php配置文件,看php是否成功挂载imagick模块 :- 创建
phpinfo.php的方法,请参见本文(第15.2节: 启动【apache】测试【php】)… - 重启
apache。说明:每当修改php的配置文件后,只需要重启apache即可,不需要重启php-fpm的操作。
- 创建
/usr/local/apache2/bin/apachectl restart
- 浏览器中查看
php配置文件:

- OK!
php已成功挂载imagick模块… - 查看模块是否添加:
grep '^extension=' /usr/local/php/etc/php.ini
extension=opcache.so
extension=imagick.so
......
- 3 编译安装
igbinary:
cd /root/lanmpp/php8
wget http://pecl.php.net/get/igbinary-3.1.6.tgz
tar -xvf igbinary*
rm -rf igbinary-3.2.6.tgz
cd igbinary*/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
php扩展模块目录大约在php.ini(950~970行之间),将新装模块目录放到结尾处…将extension=igbinary.so添入其中…
vim /usr/local/php/etc/php.ini
extension_dir="usr/local/php/lib/php/extensions/no-debug-zts-20200930/"
extension=igbinary.so
- 重载
apache服务配置,打开浏览器查看…
service apache restart

- OK!
php已成功挂载igbinary模块…
- 4
phpize&编译安装gd库:
GD库,用于创建图形&图像的函数库,C语言编写,可在PHP、Perl等多种语言中使用。GD库中提供了一系列用来处理图片的API(应用程序编程接口),使用GD库可以处理图片、生成图片,也可以给图片加水印等。还能生成汉字验证码,或者对网站数据生成统计图,与Ajax技术结合还能制作出各种强大的动态图表等众多功能。但有几个版本的gd库,对GIF相关函数无法使用。
cd /root/lanmpp/php8/php*/ext/gd
ls
config.m4 CREDITS gd.c gd_compat.h libgd tests
config.w32 gd_arginfo.h gd_compat.c gd.stub.php php_gd.h
#当前gd目录下,执行/usr/local/php/bin/phpize命令...
/usr/local/php/bin/phpize
#生成如下安装可执行文件...
configure
[root@localhost gd]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20200930
Zend Module Api No: 20200930
Zend Extension Api No: 420200930
[root@localhost gd]# ls
autom4te.cache config.m4 config.w32 gd.c gd.stub.php run-tests.php
build configure CREDITS gd_compat.c libgd tests
config.h.in configure.ac gd_arginfo.h gd_compat.h php_gd.h
- OK!安装的可执行文件
configure已生成,接下来可执行gd扩展安装了… - 预编译 & 编译安装
libgd,说明:因为gd库需要调用前面安装的zlib、jpeg、freetype和libpng,所以需指定它们的安装位置,才能正确调用这些软件。不过因为前面安装zlib时没有指定安装位置,所以指定不了【——with-zlib=/usr/local/zlib/】的位置选项,但gd会自动到默认安装位置中寻找zlib:
./configure --prefix=/usr/local/gd --with-php-config=/usr/local/php/bin/php-config --with-jpeg-dir=/user/local/jpeg9 --with-png-dir=/user/local/libpng --with-freetype-dir=/user/local/freetype --with-zlib
make && make install
make clean && make distclean
- 其中【–with-php-config】是指向安装
php后生成的一个配置工具,主要用于扩展的编译配置… - 与安装
imagick一样, - 执行完
make install安装后,会自动生成新安装php扩展模块的扩展目录:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
ls /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
gd.so imagick.so opcache.so
#可以看到该目录中,已经安装了【gd.so】这个模块...
- 配置
php挂载支持gd:- 具体操作方法与【P-22节中的(22. 2)中(配置
php挂载支持imagick)方法一样,参考即可…
- 具体操作方法与【P-22节中的(22. 2)中(配置
#将"gd.so"添加到"php.ini"配置文件中...
extension_dir="usr/local/php/lib/php/extensions/no-debug-zts-20200930/"
extension=imagick.so
extension=igbinary.so
extension=gd.so
- 完成配置后,重启
apache,浏览器中打开phpinfo.php配置文件:
service apache restart

- OK!
php已成功挂载gd库扩展模块…
- 5 编译安装
memcache扩展模块:
- 克隆方式:
git clone git://github.com/memcached/memcached.git
- 源码编译方式(最新稳定版):
cd /root/lanmpp/php8
wget https://pecl.php.net/get/memcache-8.0.tgz
tar -xvf memcache-8.0.tgz
rm -rf memcache-8.0.tgz
cd memcache*/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
ls /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
gd.so memcache.so imagick.so opcache.so
- 将
memcache.so模块添加到php.ini配置文件中:
vim /usr/local/php/etc/php.ini
extension_dir="usr/local/php/lib/php/extensions/no-debug-zts-20200930/"
extension=memcache.so
- 完成配置后,重启
apache,浏览器中打开phpinfo.php配置文件:
/usr/local/apache2/bin/apachectl restart

- OK!
php已成功挂载memcache库扩展模块…
P-23)编译安装 【memcached】服务:
memcached使用libevent来进行网络并发连接的处理,所以得先安装libevent依赖:
yum -y install libevent-devel
cd ..
wget http://www.memcached.org/files/memcached-1.6.10.tar.gz
tar -xvf memcached-1.6.10.tar.gz
rm -rf memcached-1.6.10.tar.gz
cd memcached*/
./configure --prefix=/usr/local/memcache
make && make install
- 创建&添加
memcached用户,该用户不用登录,所以不用设置登录密码:
useradd -r -s /sbin/nologin memcache
- 启动
memcache服务,设置为后台运行:
/usr/local/memcache/bin/memcached -umemcache &
- 检查
memcache是否正常启动,并监听了11211端口:
netstat -an | grep :11211
-----------------------------------------
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp6 0 0 :::11211 :::* LISTEN
11211端口连接测试:
yum -y install telnet
`telnet localhost 11211
#该方法可以访问到任何端口的信息......
-----------------------------------------
Trying ::1...
Connected to localhost.
Escape character is '^]'.
------------信息查询举例----------------
stats
STAT pid 209390
STAT uptime 970
STAT time 1628777740
STAT version 1.6.10
STAT libevent 2.1.8-stable
STAT pointer_size 64
STAT rusage_user 0.084402
STAT rusage_system 0.068763
STAT max_connections 1024
......
---------------
quit
Connection closed by foreign host.`

* 1
* 2
* 3
* 4
* 5
* 6
* 7
* 8
* 9
* 10
* 11
* 12
* 13
* 14
* 15
* 16
* 17
* 18
* 19
* 20
* 21
- 连接成功…列举如下【5】个常用命令:
- 【stats】:当前所有
memcached服务器运行的状态信息。 - 【add】:添加一个数据到服务器。
- 【set】:替换一个已经存在的数据,若数据不存在,则和
add命令相同。 - 【get】:从服务器端提取指定的数据。
- 【delete】:删除指定的单个数据。如果要清除所有数据,可以使用
flush_all指令。
如果以上命令执行发生错误,MemCache协议会对错误部分做出提示。- 主要有如下【3】个错误信息提示:
- 【ERROR】 <!普通的错误信息>:如指令错误……
- 【CLIENT_ERROR】 <!错误信息>:客户端错误……
- 【SERVER_ERROR】 <!错误信息>:服务器端错误……
- 【stats】:当前所有
P-24)编译安装【Redis】服务
- 下载
Redis最新稳定版
cd ..
wget https://download.redis.io/releases/redis-6.2.5.tar.gz
- 由于
Redis属于iso软件,所以不用预编译配置,直接make install编译 & 安装Redis:
tar -xvf redis-6.2.5.tar.gz
rm -rf redis-6.2.5.tar.gz
cd redis*/
make install PREFIX=/usr/local/redis
-----------------
make[1]: 离开目录“/root/lanmpp/php8/redis-6.2.5/src”
- 创建
redisetc目录:
mkdir /usr/local/redis/etc
- 配置
redis.conf文件:
mv /root/lanmpp/php8/redis-6.2.5/redis.conf /usr/local/etc/redis.conf
- 修改
redis.conf文件,并将其设置为后台启动:
vim /usr/local/etc/redis.conf
#将daemonize no 改成 daemonize yes (大约在255-260行之间)
- 开启
Redis服务:
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
- 检查
Redis是否正常启动,并监听了6379端口:
netstat -an | grep :6379
------------------------------------------------
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
6379端口连接测试:
telnet localhost 6379
-----------连接成功-----------------
Trying ::1...
Connected to localhost.
Escape character is '^]'.
----------变量测试--------------
set one 1000
+OK
get one
$4
1000
quit
+OK
Connection closed by foreign host.
- 1
PHP安装redis扩展模块:
cd ..
wget https://codeload.github.com/phpredis/phpredis/zip/develop
unzip phpredis-develop.zip
cd phpredis-develop/
- 生成配置文件
configure:
/usr/local/php/bin/phpize
- 安装
redis扩展模块:
./configure --with-php-config=/usr/local/php/bin/php-config --enable-redis
make && make install
--------------------------------------------------
ls /usr/local/php/lib/php/extensions/no-debug-zts-20200930/
gd.so imagick.so memcache.so opcache.so redis.so
- 将
redis.so模块添加到php.ini配置文件中:
vim /usr/local/php/etc/php.ini
extension_dir="usr/local/php/lib/php/extensions/no-debug-zts-20200930/"
extension=redis.so
- 完成配置后,重启
apache,浏览器中打开phpinfo.php配置文件:
/usr/local/apache2/bin/apachectl restart

- OK!
php已成功挂载redis库扩展模块…
P-25)开启【PHP】加速缓存模块:
- 开启
zend_opcache扩展模块:
vim /usr/local/php/etc/php.ini
----------大约(960行)----------
;zend_extension=opcache
------去掉前面的注释冒号';'------
zend_extension=opcache
- 配置
zend_opcache文件:
#------采用官方开发组推荐的配置------
[zend_opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.revalidate_freq=60
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
#---就在'zend_extension=opcache'下面添加即可---
:wq
- 完成配置后,重启
apache,浏览器中打开phpinfo.php配置文件:
/usr/local/apache2/bin/apachectl restart

- OK!
php已成功开启zend_opcache扩展模块…
P-26)安装【PHP】依赖管理工具【Composer】
- 下载
Composer:- 好处:参与开发的人员较多,能随时保持更新状态,安全性极好,能随时检测出你从另处下载来使用的代码错误&漏洞…
- 项目中常用的【Composer】代码包: | 包 名 | 功 能 描 述 | 网 址 | | —- | —- | —- | | guzzlehttp/guzzle | 功能强大的HTTP请求库 | https://packagist.org/packages/guzzlehttp/guzzle | | hashids/hashids | 数字ID转字符串,支持多语言 | https://packagist.org/packages/hashids/hashids | | intervention/image | 图片处理,获取图片信息、上传、格式转换、缩放、裁剪等 | https://packagist.org/packages/intervention/image | | phpmailer/phpmailer | 邮件发送 | https://packagist.org/packages/phpmailer/phpmailer | | phpoffice/phpexcel | excel操作类 | https://packagist.org/packages/phpoffice/phpexcel | | monolog/monolog | 日志操作, composer官方就是用它做例子的 | https://packagist.org/packages/monolog/monolog | | catfan/medoo | 简单易用的数据库操作类,支持各种常见数据库 | https://packagist.org/packages/catfan/medoo | | league/route | 路由调度 | https://packagist.org/packages/league/route | | Carbon/Carbon | 时间操作 | https://packagist.org/packages/nesbot/carbon |
- 下载
composer最新稳定版执行文件:
cd /root/lanmpp/php8
wget https://getcomposer.org/download/latest-stable/composer.phar
- 将
composer程序文件拷贝 & 移动至全局:
sudo mv composer.phar /usr/local/bin/composer
- 创建
composer映射软链接:
ln -s /usr/local/php/bin/php /usr/local/bin/
- 修改
composer.phar执行权限:
chmod u+x /usr/local/bin/composer
- 由于
Composer属命令行工具,安装完成后,在命令行中输入composer-V或composer命令后回车,即可执行成功:
#提示:不要以超级用户root用户运行,不予理会,输入【yes】
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?
---------------------------------------------------------------------------
composer --version
Composer version 2.1.5 2021-07-23 10:35:47
---------------------------------------------------------------------------
/usr/local/bin/composer

- 执行
Composer命令,将镜像设置为国内镜像,以加速php运行速度:
/usr/local/bin/composer \
config -g repo.packagist composer https://packagist.phpcomposer.com
#或者...
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
--------------------------------------------------------------------------
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes

- 输入
yes确认,国内镜像配置成功!
附注: Composer 使用简要说明:
- 查看
Composer全局设置命令:
/usr/local/bin/composer config -gl
- 部分截图:

composer更新:
composer selfupdate
- 在使用
composer install、composer update、composer require这【3】个命令时,都会下载PHP类库。也都有可能要经过以下几个步骤。 - Composer 执行命令需要经历的步骤
(1)Composer 读取 composer.json 文件,这个 json 在当前执行项目的目录下。
(2)Composer 通过读取的 json 数据去 Packagist.org 获取各个包的包名、作者、下载 URL 等信息。
(3)将从 Packagist.org 获取的元数据存放到当前目录下的 composer.lock 中。
(4)Composer 读取 composer.lock 中的元数据,根据元数据下载包,并且放到当前目录下的 vendor 目录里面。
其中, composer update 会将以上(1)、(2)、(3)、(4)这四个步骤都执行一遍,所以下载的类库是 composer.json 配置中匹配搭配的最新类库。
- 而
composer install只执行步骤(4),composer require会将配置写入composer.json…
然后执行(1)、(2)、(3)、(4)这四个步骤。如果想了解不同的包的配置是怎么写的,可以在Packagist.org中找到,因为每个开源项目都有安装和使用方法。 - 另一点提醒注意:完成所有的
PHP安装 & 测试之后,为安全起见,应将 测试文件phpinfo.php删除!
- OK!VM-CentOS-8+Linux8中编译安装
php-8.0.9& 配置详述完毕,够详细的吧!!!
