一.问题情况
因为公司程序需要在一台老的测试机centos6上面运行一个新框架,最低需要php7.4.25,于是就开始研究下如何安装
二.解决方法
首先推一波朋友的一键安装包wlnmp,如果可以成功的朋友就不用再编译安装了.
CentOS6 yum安装php7.4(基于WLNMP包)
但是我按安装方法安装后提示
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 |
yum install wphp74 已加载插件:fastestmirror, refresh-packagekit, security 设置安装进程 Loading mirror speeds from cached hostfile 解决依赖关系 --> 执行事务检查 ---> Package wphp74.x86_64 0:7.4.11-1.el6 will be 安装 --> 处理依赖关系 libjpeg.so.9(LIBJPEG_9.0)(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libtidy-0.99.so.0()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libsodium.so.23()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libpspell.so.15()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libonig.so.5()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libjpeg.so.9()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libiodbcinst.so.2()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libiodbc.so.2()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libicuuc.so.50()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libicuio.so.50()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libicui18n.so.50()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libicudata.so.50()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libaspell.so.15()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 执行事务检查 ---> Package aspell.x86_64 12:0.60.6-12.el6 will be 安装 ---> Package libtidy.x86_64 0:0.99.0-19.20070615.1.el6 will be 安装 ---> Package wicu.x86_64 0:50.2-1.el6 will be 安装 ---> Package wjpeg.x86_64 0:9c-1.el6 will be 安装 ---> Package wlibsodium.x86_64 0:1.0.18-1.el6 will be 安装 ---> Package woniguruma.x86_64 0:6.9.3-1.el6 will be 安装 ---> Package wphp74.x86_64 0:7.4.11-1.el6 will be 安装 --> 处理依赖关系 libiodbcinst.so.2()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 处理依赖关系 libiodbc.so.2()(64bit),它被软件包 wphp74-7.4.11-1.el6.x86_64 需要 --> 完成依赖关系计算 错误:Package: wphp74-7.4.11-1.el6.x86_64 (wlnmp) Requires: libiodbc.so.2()(64bit) 错误:Package: wphp74-7.4.11-1.el6.x86_64 (wlnmp) Requires: libiodbcinst.so.2()(64bit) You could try using --skip-broken to work around the problem ** Found 4 pre-existing rpmdb problem(s), 'yum check' output follows: automake-1.11.1-4.el6.noarch has missing requires of autoconf >= ('0', '2.62', None) glibc-2.12-1.212.el6_10.3.i686 has missing requires of glibc-common = ('0', '2.12', '1.212.el6_10.3') glibc-2.17-55.el6.x86_64 is a duplicate with glibc-2.12-1.212.el6_10.3.i686 libtool-2.2.6-15.5.el6.x86_64 has missing requires of autoconf >= ('0', '2.58', None) |
centos6系统epel和对应的报版本低的几个库已经是最新的无法自动yum升级了.而且由于编译基础库遇到的问题可能会更多,所以我就直接下载php7.4.25源码编译
源码编译方法:
1.首先下载下载php7.4源码,为了方便我单独开了个目录
1 2 3 |
mkdit /data/php74 cd /data/php74 wget https://www.php.net/distributions/php-7.4.25.tar.gz |
2.安装编译环境
1 |
yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel |
3.解压编译安装PHP
1 2 3 4 |
tar -zxvf php-7.4.25.tar.gz cd ./php-7.4.25 #编译的时候最好自定义一下参数(网上copy的参数,有些参数会提示不存在,不用在意) ./configure --prefix=/usr/local/php --disable-fileinfo --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mysql-sock=/var/lib/mysql/mysql.sock --without-pear --enable-bcmath |
提示No package 'sqlite3' found请操作(未出现请跳过)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
yum install sqlite #提示 Package sqlite-3.6.20-1.el6_7.2.x86_64 already installed and latest version Nothing to do #只能编译安装最新版 http://www.sqlite.org/download.html #找到最新的版本包 cd /data/php74 wget https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz tar -zxvf sqlite-autoconf-3360000.tar.gz cd sqlite-autoconf-3360000 ./configure mkae && make install |
提示No package 'oniguruma' found 请操作(未出现请跳过)
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 |
#安装编译环境 yum install -y gcc gcc-c++ make expat-devel autoconf automake #下载oniguruma源码 cd /data/php74 wget https://github.com/kkos/oniguruma/archive/v6.9.5_rev1.tar.gz -O oniguruma-6.9.5_rev1.tar.gz #其他版本请从页面下载https://github.com/kkos/oniguruma/releases tar -xf oniguruma-6.9.5_rev1.tar.gz cd ~/oniguruma-6.9.5_rev1 ./autogen.sh #如果遇到如下错误提示 src/Makefile.am:19: error: Libtool library used but 'LIBTOOL' is undefined #安装执行依赖 yum install libtool #然后进行预编译 ./configure --bindir=/usr/sbin/ \ --sbindir=/usr/sbin/ \ --libexecdir=/usr/libexec \ --sysconfdir=/etc/ \ --localstatedir=/var \ --libdir=/usr/lib64/ \ --includedir=/usr/include/ \ --datarootdir=/usr/share \ --infodir=/usr/share/info \ --localedir=/usr/share/locale \ --mandir=/usr/share/man/ \ --docdir=/usr/share/doc/onig #最后编译安装 make && make install |
4.安装完成,制作系统服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#创建php运行用户组及用户 groupadd www-data useradd -M -g www-data -s /sbin/nologin www-data #然后进入目录cp文件 cd /usr/local/php/etc cp php-fpm.conf.default php-fpm.conf cd php-fpm.d cp www.conf.default www.conf vi www.conf #搜索“user”设置运行账号: user=www-data group=www-data #创建一个php的环境变量 vim /etc/sysconfig/php PHP_HOME=/usr/local/php PIDFILE=/var/run/php-fpm.pid #创建php-fpm的service服务 vim /etc/init.d/php-fpm #! /bin/sh # # php-fpm Startup script for php-fpm # # chkconfig: - 84 16 # description: PHP FastCGI Process Manager # processname: php-fpm # config: /usr/local/php/etc/php-fpm.conf # pidfile: /var/run/php-fpm.pid ### BEGIN INIT INFO # Provides: php-fpm # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop php-fpm ### END INIT INFO # Source function library. . /etc/init.d/functions # Check that networking is up. . /etc/sysconfig/network if [ -f /etc/sysconfig/php ]; then . /etc/sysconfig/php fi if [ "$NETWORKING" = "no" ] then exit 0 fi if test -n "$PHP_HOME" then export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin fi RETVAL=0 prog="php-fpm" pidfile=${PIDFILE-/var/run/php-fpm.pid} lockfile=${LOCKFILE-/var/lock/subsys/php-fpm} start () { echo -n $"Starting $prog: " dir=$(dirname ${pidfile}) [ -d $dir ] || mkdir $dir daemon --pidfile ${pidfile} php-fpm RETVAL=$? echo [ $RETVAL -eq 0 ] && touch ${lockfile} } stop () { echo -n $"Stopping $prog: " killproc -p ${pidfile} php-fpm RETVAL=$? echo if [ $RETVAL -eq 0 ] ; then rm -f ${lockfile} ${pidfile} fi } configtest () { echo -n $"Testing $prog: " php-fpm -t RETVAL=$? } restart () { stop start } reload () { echo -n $"Reloading $prog: " killproc -p ${pidfile} php-fpm -USR2 RETVAL=$? echo } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} php-fpm RETVAL=$? ;; configtest) configtest ;; restart) restart ;; reload|force-reload) reload ;; condrestart|try-restart) [ -f ${lockfile} ] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|configtest|restart|reload|force-reload|condrestart|try-restart}" RETVAL=2 ;; esac exit $RETVAL |
最后启动php-fpm服务
1 |
service php-fpm start |