VM-CentOS-8+Linux8中编译安装php-8.0.9无错详解教程


版权声明:本文为CSDN博主「sngee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sngee/article/details/119811093

P-01) 系统 &环境
运行环境:实验室虚拟环境

系统型号:CtenOS-8.4-x86_64

Linux版本:linux-8-x86_64

CPU&内存:4H + 4GB

系统内核:

uname -r
4.18.0-305.10.2.el8_4.x86_64
P-02) 安装前准备
1 已安装 Apache ,查看安装的版本。源码编译安装【Apache】的方法请参阅……
apachectl -v
#Server version: Apache/2.4.37 (centos)
#Server built: May 20 2021 04:33:06
#或者...
httpd -v
2 已安装 Nginx ,查看安装的版本。源码编译安装【Ninux】的方法请参阅……
nginx -v
#nginx version: nginx/1.20.1
3 已安装 MySQL ,查看安装的版本。源码编译安装【MySQL】的方法请参阅……
mysql -V
#mysql Ver 8.0.25 for Linux on x86_64 (Source distribution)
#或者...登录数据库...
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
#===安装后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 的,只是其扩展包 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:
//配置:错误:未满足程序包要求(libxml-2.0>=2.9.0):
Package 'libxml-2.0', required by 'virtual:world', not found
//没有找到“virtual:world”所需要的包“libxml-2.0”...
解决方法:
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行之间):
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
修改成…
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

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'
#/root/lanmpp/php8/php-8.0.9/sapi/fpm/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 #服务帮助,安装软件包“php-fpm”以提供命令“php-fpm”? [N/y] n,可选择暂时不安装...
service php-fpm start #需添加php-fpm到service服务的配置...
systemctl start php-fpm
systemctl start php-fpm.service
#Starting php-fpm done
**注意:**若遇报错 </Starting php-fpm [10-Aug-2021 07:30:31] ERROR: unable to bind listening socket for address ‘127.0.0.1:9000’: Address already in use (98)>。

或:</ERROR: FPM initialization failed> 错误: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 #服务帮助,安装软件包“php-fpm”以提供命令“php-fpm”? [N/y] n,可选择暂时不安装...
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 #+ php-fpm的master主进程号 #查看php-fpm主进程号:ps -ef|grep php
/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
#注意:正在将请求转发到“systemctl enable php-fpm.service”。
/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个模块没装...
内测 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
![php扩展模块目录](https://img-blog.csdnimg.cn/f8087779f5c44c43b7808f67e58439b0.png?x-oss-process=imag 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)方法一样,参考即可…
#将"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.
连接成功…列举如下【5】个常用命令:
【stats】:当前所有 memcached 服务器运行的状态信息。
【add】:添加一个数据到服务器。
【set】:替换一个已经存在的数据,若数据不存在,则和 add 命令相同。
【get】:从服务器端提取指定的数据。
【delete】:删除指定的单个数据。如果要清除所有数据,可以使用 flush_all 指令。
如果以上命令执行发生错误,MemCache 协议会对错误部分做出提示。
主要有如下【3】个错误信息提示:
【ERROR】 <!普通的错误信息>:如指令错误……
【CLIENT_ERROR】 <!错误信息>:客户端错误……
【SERVER_ERROR】 <!错误信息>:服务器端错误……
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”
创建 redis etc 目录:
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 & 配置详述完毕,够详细的吧!!!

内容相当全面,也有点难度,耗时也很长,发文辛苦!如果对你有帮助,就请点个赞!留下你的高见呗…

更多【IT & 编程】知识内容,请关注【sngee】的博客…欢迎大家交流 & 点评!!!


学如人生,砥砺前行…

posted @ 2023-03-07 10:49  全琪俊  阅读(304)  评论(0编辑  收藏  举报