道招

centos8以源码方式安装php7.4

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

centos8以源码方式安装php7.4

学习学习源码安装挺好的。

本文主要参考、学习自https://www.cnblogs.com/alliancehacker/p/12255445.html 感谢原作者

下载源码

地址 https://www.php.net/distributions/php-7.4.13.tar.bz2

# 下载
wget https://www.php.net/distributions/php-7.4.13.tar.bz2 --no-check-certificate
# 解压
tar --bzip -xvf ./php-7.4.13.tar.bz2
# 剪切至通用位置
mv php-7.4.13.tar.bz2 /usr/local/php

安装编译工具

yum -y install gcc gcc-c++
yum -y install libxml2-devel openssl-devel curl-devel libjpeg-devel libpng-devel libicu-devel freetype-devel openldap-devel openldap openldap-devel

file

创建用户组

方便和nginx使用

groupadd nginx
useradd -g nginx nginx

编译参数含义(可选)

可以参考文末的附录

执行编译参数

./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-mcrypt --with-libmbfl --enable-ftp --with-gd --enable-gd-jis-conv --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-pear --enable-maintainer-zts --with-ldap=shared --without-gdbm

换行就是下面这样的,效果等价

./configure --prefix=/usr/local/php \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--with-mcrypt \
--with-libmbfl \
--enable-ftp \
--with-gd \
--enable-gd-jis-conv \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--disable-fileinfo \
--enable-opcache \
--with-pear \
--enable-maintainer-zts \
--with-ldap=shared \
--without-gdbm

执行上述命令会检查依赖项 file

编译错误

一般都会有依赖性缺失的问题,不想每次检查的话,可以依次将下面的问题清理完,再支持configue操作

报错一

file

安装sqlite3这个包就好

yum install sqlite-devel

file

报错二

file 没有找到这个文件夹,我们就给它一个,将对应的东西复制进去

cp -frp /usr/lib64/libldap* /usr/lib/

报错三

file

安装oniguruma这个包,这个就有点烦人,这个我是参考https://blog.csdn.net/qq_17631419/article/details/106803807 感谢原作者 centos7

sudo yum install oniguruma-devel

centos8

# 下载
wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
tar -zxf oniguruma-6.9.4.tar.gz
cd oniguruma-6.9.4

# 编译安装
./autogen.sh && ./configure --prefix=/usr
make && make install

file

再次尝试编译

cd /usr/local/php

./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-mcrypt --with-libmbfl --enable-ftp --with-gd --enable-gd-jis-conv --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-pear --enable-maintainer-zts --with-ldap=shared --without-gdbm

出现这个就稳了

file

make && make install (耗时较长)

出现这个就算大功告成了 file

映射全局命令

ln -s /usr/local/php/sbin/* /usr/local/sbin/
ln -s /usr/local/php/bin/* /usr/local/bin/

file

删除php7.4.*

rm -rf /usr/local/php /bin/php /usr/local/sbin/php-fpm /usr/local/bin/php /usr/local/bin/pear /usr/local/bin/peardev /usr/local/bin/pecl /usr/local/bin/phar /usr/local/bin/phar.phar /usr/local/bin/php-cgi /usr/local/bin/php-config /usr/local/bin/phpdbg /usr/local/bin/phpize

安装成功后的配置

php.ini

php.ini文件位于 /usr/local/php/lib或者/usr/local/php 如果不存在则使用/usr/local/php/php.ini-production复制一个后更改 上调上传文件大小大小上限

upload_max_size = 128M
php-fpm

php-fpm位于/usr/local/php/etc/下 创建php-fpm.conf

cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
vi php-fpm.conf

编辑 php-fpm.conf

放开pid

[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
pid = run/php-fpm.pid

根据注释可以看出此时pid的绝对路径是/usr/local/php/var/run/php-fpm.pid,后面配合systemctl需要用到

放开log

; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
; into a local file.
; Note: the default prefix is /usr/local/php/var
; Default Value: log/php-fpm.log
error_log = log/php-fpm.log

修改www.conf

cd /usr/local/php/etc/php-fpm.d
cp www.conf.default www.conf
vi www.conf

检查user和group是不是nginx

; Start a new pool named 'nginx'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[www]

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx

更改监听方式为sock

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /usr/local/php/var/run/www.sock

放开监听

listen.mode = 0660

使用systemctl管理php-fpm

vi /usr/lib/systemd/system/php-fpm.service

在里面写入下列内容,注意pid路径的正确性

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重新加载systemctll配置

systemctl daemon-reload

设置开机启动

systemctl enable php-fpm

状态管理指令

systemctl start php-fpm
systemctl status php-fpm
systemctl stop php-fpm
systemctl restart php-fpm
systemctl enable php-fpm
systemctl didable php-fpm

附录:编译参数含义

想直接撸可以跳过进入下一步

./configure
–prefix=/usr/local/php  php安装目录
–with-apxs2=/usr/local/apache/bin/apxs
–with-config-file-path=/usr/local/php/etc      指定php.ini位置
–with-MySQL=/usr/local/mysql mysql安装目录,对mysql的支持
–with-mysqli=/usr/local/mysql/bin/mysql_config  mysqli文件目录,优化支持
–enable-safe-mode 打开安全模式
–enable-ftp  打开ftp的支持
–enable-zip  打开对zip的支持
–with-bz2  打开对bz2文件的支持                        
–with-jpeg-dir 打开对jpeg图片的支持
–with-png-dir 打开对png图片的支持
–with-freetype-dir  打开对freetype字体库的支持
–without-iconv  关闭iconv函数,种字符集间的转换
–with-libxml-dir   打开libxml2库的支持
–with-xmlrpc  打开xml-rpc的C语言
–with-zlib-dir   打开zlib库的支持
–with-gd  打开gd库的支持
–enable-gd-native-ttf  支持TrueType字符串函数库
–with-curl  打开curl浏览工具的支持
–with-curlwrappers  运用curl工具打开url流
–with-ttf  打开freetype1.*的支持,可以不加了
–with-xsl  打开XSLT文件支持,扩展了libxml2库 ,需要libxslt软件
–with-gettext  打开gnu的gettext 支持,编码库用到
–with-pear  打开pear命令的支持,php扩展用的
–enable-calendar  打开日历扩展功能
–enable-mbstring  多字节,字符串的支持
–enable-bcmath   打开图片大小调整,用到zabbix监控的时候用到了这个模块
–enable-sockets  打开sockets 支持
–enable-exif  图片的元数据支持
–enable-magic-quotes  魔术引用的支持
–disable-rpath  关闭额外的运行库文件
–disable-debug  关闭调试模式
–with-mime-magic=/usr/share/file/magic.mime  魔术头文件位置

cgi方式安装才用的参数

–enable-fpm  打上php-fpm补丁后才有这个参数,cgi方式安装的启动程序
–enable-fastcgi  支持fastcgi方式启动php
–enable-force-cgi-redirect  同上,帮助里没有解释
–with-ncurses   持ncurses屏幕绘制以及基于文本终端的图形互动功能的动态库
–enable-pcntl  freeTDS需要用到的,可能是链接mssql才用到

mhash和mcrypt算法的扩展
–with-mcrypt   算法
–with-mhash    算法

–with-gmp
–enable-inline-optimization
–with-openssl  openssl的支持,加密传输时用到的
–enable-dbase
–with-pcre-dir=/usr/local/bin/pcre-config    perl的正则库案安装位置
–disable-dmalloc
–with-gdbm      dba的gdbm支持
–enable-sigchild
–enable-sysvsem
–enable-sysvshm
–enable-zend-multibyte 支持zend的多字节
–enable-mbregex
–enable-wddx
–enable-shmop
–enable-soap

PHP配置选项完整列表 数据库选项

--with-dbplus  包括 dbplus 的支持。
--with-adabas[=DIR]  包括 Adabas D 的支持。DIR 是 Adabas 的基本安装目录,默认为 /usr/local。
--with-sapdb[=DIR]  包括 SAP DB 的支持。DIR 是 SAP DB 的基本安装目录,默认为 /usr/local。
--with-solid[=DIR]  包括 Solid 的支持。DIR 是 Solid 的基本安装目录,默认为 /usr/local/solid。
--with-ibm-db2[=DIR]  包括 IBM DB2 的支持。DIR 是 DB2 的基本安装目录,默认为 /home/db2inst1/sqllib。
--with-empress[=DIR]  包括 Empress 的支持。DIR 是 Empress 的基本安装目录,默认为 $EMPRESSPATH。自 PHP4起,本选项仅支持 Empress 8.60 及以上版本。
--with-empress-bcs[=DIR]  包括 Empress Local Access 的支持。DIR 是 Empress 的基本安装目录,默认为$EMPRESSPATH。自 PHP4 起,本选项仅支持 Empress 8.60 及以上版本。
--with-birdstep[=DIR]  包括 Birdstep 的支持。DIR 是 Birdstep 的基本安装目录,默认为/usr/local/birdstep。
--with-custom-odbc[=DIR]  包括用户自定义 ODBC 的支持。DIR 是 ODBC 的基本安装目录,默认为 /usr/local。要确认定义了CUSTOM_ODBC_LIBS 并且在 include 目录中有某个 odbc.h。例如,对于 QNX 下的 Sybase SQLAnywhere 5.5.00,在运行 configure 脚本之前应该先定义以下环境变量: CPPFLAGS="-DODBC_QNX-DSQLANY_BUG" LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib-lodbc".
--with-iodbc[=DIR]  包括 iODBC 的支持。DIR 是 iODBC 的基本安装目录,默认为 /usr/local。
--with-esoob[=DIR]  包括 Easysoft OOB 的支持。DIR 是 OOB 的基本安装目录,默认为/usr/local/easysoft/oob/client。
--with-unixODBC[=DIR]  包括 unixODBC 的支持。DIR 是 unixODBC 的基本安装目录,默认为 /usr/local。
--with-openlink[=DIR]  包括 OpenLink ODBC 的支持。DIR 是 OpenLink 的基本安装目录,默认为 /usr/local。这和 iODBC一样。
--with-dbmaker[=DIR]  包括 DBMaker 的支持。DIR 是 DBMaker 的基本安装目录,默认为最新版 DBMaker 安装的目录(例如/home/dbmaker/3.6)。
--disable-unified-odbc  取消对 unified ODBC 的支持。仅适用于激活了 iODBC,Adabas,Solid,Velocis 或用户自定义 ODBC界面。仅能用于 PHP 3!

图像选项
--without-gd  禁用 GD 支持。仅用于 PHP 3!
--with-imagick  Imagick 扩展被移到 PEAR 中的 PECL 中去了,可以在这里找到。PHP 4 中的安装指示可以在 PEAR站点中找到。只用 --with-imagick 仅在 PHP 3 中支持,除非依照 PEAR 站点的指示去做。
--with-ming[=DIR]  包括 ming 支持。

杂类选项
--enable-force-cgi-redirect  激活服务器内部重定向的安全检查。如果是在 Apache 中以 CGI 方式使用 PHP 则应该使用此选项。
--enable-discard-path  使用此选项可以使 PHP 的 CGI 可执行程序安全地放置在 web 目录树以外的地方,并且别人也不能绕过 .htaccess的安全设置。
--with-fastcgi  将 PHP 编译成 FastCGI 应用程序。
--enable-debug  编译时加入调试符号。
--with-layout=TYPE  设置安装后的文件布局。TYPE 可以是 PHP(默认值)或者 GNU。
--with-pear=DIR  将 PEAR 安装在 DIR 目录中(默认为 PREFIX/lib/php)。
--without-pear  不安装 PEAR。
--enable-sigchild  激活 PHP 自己的 SIGCHILD 句柄。
--disable-rpath  禁止传递附加的运行时库搜索路径。
--enable-libgcc  激活显式 libgcc 连接。
--enable-php-streams  包含试验的 PHP 流。除非是测试源代码,否则不要使用!
--with-zlib-dir=<DIR>  定义zlib 的安装路径。
--with-aspell[=DIR]  包含 ASPELL 支持。
--with-ccvs[=DIR]  包含 CCVS 支持。
--with-cybercash[=DIR]  包含 CyberCash 支持。DIR 是 CyberCash MCK 的安装目录。
--with-icap[=DIR]  包含 ICAP 支持。
--with-ircg-config  ircg-config 脚本的路径。
--with-ircg  包含 ircg 支持。
--enable-mailparse  包含 mailparse 支持。
--with-muscat[=DIR]  包含 muscat 支持。
--with-satellite[=DIR]  激活通过 Satellite(试验性质)的 CORBA 支持。DIR 是 ORBit 的主目录。
--enable-trans-sid  激活透明的 session id 传播。
--with-regex[=TYPE]  使用系统 regex 库(不赞成)。
--with-vpopmail[=DIR]  包含 vpopmail 支持。
--with-tsrm-pthreads  使用 POSIX 线程(默认值)。
--enable-shared[=PKGS]  编译共享库 [default=yes]。
--enable-static[=PKGS]  编译静态库 [default=yes]。
--enable-fast-install[=PKGS]  为快速安装而优化 [default=yes]。
--with-gnu-ld  假定 C 编译器使用 GNU ld [default=no]。
--disable-libtool-lock  避免锁死(可能会破坏并行编译)。
--with-pic  尝试只使用 PIC/non-PIC 对象 [default=use both]。
--enable-memory-limit  编译时加入内存限制支持。
--disable-url-fopen-wrapper  禁止通过 URL 的 fopen wrapper,不能通过 HTTP 或 FTP 访问文件。
--enable-versioning  仅输出所需要的符号。更多信息见 INSTALL 文件。
--with-imsp[=DIR]  包含 IMSp 支持(DIR 是 IMSP 的 include 目录和 libimsp.a 目录)。仅用于 PHP 3!
--with-mck[=DIR]  包含 Cybercash MCK 支持。DIR 是 cybercash mck 编译目录,默认为/usr/src/mck-3.2.0.3-Linux。帮助见 extra/cyberlib。仅用于 PHP 3!
--with-mod-dav=DIR  包含通过 Apache 的 mod_dav 的 DAV 支持。DIR 是 mod_dav 的安装目录(仅用于 Apache模块版本!)仅用于 PHP 3!
--enable-debugger  编译入远程调试函数。仅用于 PHP 3!
--enable-versioning  利用 Solaris 2.x 和 Linux 提供的版本控制与作用范围的优势。仅用于 PHP 3!

PHP 选项
--enable-maintainer-mode  激活将编译规则和未使用的(以及一些混淆的)依赖文件放入临时安装中。
--with-config-file-path=PATH  设定php.ini 所在的路径,默认为PREFIX/lib。
--enable-safe-mode  默认激活安全模式。
--with-exec-dir[=DIR]  安全模式下只允许此目录下执行程序。默认为/usr/local/php/bin。
--enable-magic-quotes  默认激活 magic quotes。
--disable-short-tags  默认禁止简写的 PHP 开始标记 <?。

服务器选项
--with-aolserver=DIR  指定已安装的 AOLserver 的路径。
--with-apxs[=FILE]  编译共享 Apache 模块。FILE 是可选的 Apache 的 apxs 工具的路径,默认为 apxs。确保指定的 apxs版本是安装后的文件而不是 Apache 源程序中包中的。
--with-apache[=DIR]  编译Apache 模块。DIR是 Apache 源程序的最高一级目录。默认为/usr/local/apache。
--with-mod_charset  激活 mod_charset 中的传递表(Apache 中)。
--with-apxs2[=FILE]  编译共享的Apache 2.0 模块。FILE是可选的 Apache 的apxs 工具的路径,默认为apxs。
--with-fhttpd[=DIR]  编译 fhttpd 模块。DIR 是 fhttpd 的源代码路径,默认为 /usr/local/src/fhttpd。
--with-isapi=DIR  将 PHP 编译为 ISAPI 模块用于 Zeus。
--with-nsapi=DIR  指定已安装的 Netscape 服务器路径。
--with-phttpd=DIR
--with-pi3web=DIR  将 PHP 编译为用于 Pi3Web 的模块。
--with-roxen=DIR  将 PHP 编译为一个 Pike 模块。DIR 是 Roxen 的根目录,通常为/usr/local/roxen/server。
--enable-roxen-zts  编译 Roxen 模块,使用 Zend Thread Safety。
--with-servlet[=DIR]  包含 servlet 支持。DIR 是 JSDK 的基本安装目录。本 SAPI 需要 Java 扩展必须被编译为共享的dl。
--with-thttpd=SRCDIR  将 PHP 编译为 thttpd 模块。
--with-tux=MODULEDIR  将 PHP 编译为 TUX 模块(仅用于 Linux)。
更新时间:
上一篇:使用ssh访问远程代码仓库下一篇:docker安装php nginx mysql容器化记录

相关文章

如果android能运行windows程序,你会不会更喜欢android

如果可以在Android手机和平板电脑上能使用原本习惯了的Windows软件,是不是使用起来更得心应手,是不是更充分地发挥移动计算的能力呢? Wine 是一款 Linux 和 Mac 下的软件,它能 阅读更多…

用nginx架设wordpress提示上传文件失败,无权限

网上一般解决方案都只是简单说文件没有执行权限,需要设置为755权限。实际上在使用nginx来作为服务器来使用wordpress的时候,需要用到php-fpm来解析php,默认用户是apache,而我 阅读更多…

为什么我老是要折腾系统

为什么我老是折腾系统。晕死,我用win7,ubuntu,fedora KDE桌面,想过用Kubuntu,想过用YLMF OS,想着用win7,ubuntu,mac三系统,想着只用ubuntu,想着用u 阅读更多…

关注道招网公众帐号
友情链接
消息推送
道招网关注互联网,分享IT资讯,前沿科技、编程技术,是否允许文章更新后推送通知消息。
允许
不用了