- 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 -r
4.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”
- 创建
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
& 配置详述完毕,够详细的吧!!!