//yum的一些操作
//1. 备份原来的yum源
# sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
//2.设置aliyun的yum源
# sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
//3.添加EPEL源
# sudo wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
//4.清理缓存,生成新缓存,执行yum更新
# sudo yum clean all
# sudo yum makecache
# sudo yum update
//centos yum install没有可用软件包
# yum install epel-release
//没有已启用的仓库。 执行 "yum repolist all" 查看您拥有的仓库。 您可以用 yum-config-manager --enable <仓库名> 来启用仓库
# yum repolist all
//源都添加完了之后,再装个插件,yum install yum-fastestmirror -y,这个会自动选择快的那个源。
# yum -y install yum-fastestmirror
# yum -y install unzip zip bash-completion lsof epel-release
//整理yum命令安装php需要的常用库
# yum -y install libmcrypt libmcrypt-devel mhash mhash-devel libxslt libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel openldap-clients openldap-servers nss_ldap pcre pcre-devel db4 db4-utils fontconfig fontconfig-devel libtiff libtiff-devel giflib giflib-devel
//下载libiconv 或者用ftp工具上传
# cd /usr/local/src
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
//编译安装libiconv ,解压压缩包并进入解压好的文件目录
# cd /usr/local/src
# tar -zxvf libiconv-1.14.tar.gz
# cd cd libiconv-1.14
# ./configure --prefix=/usr/local/libiconv
# make
# make install
//# make && make install
// --prefix 指令指的是指定安装的目录
//编译的过程中出现错误如下
In file included from progname.c:26:0:
./stdio.h:1010:1: 错误:‘gets’未声明(不在函数内)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
make[2]: *** [progname.o] 错误 1
make[2]: 离开目录“/usr/local/src/libiconv-1.14/srclib”
make[1]: *** [all] 错误 2
make[1]: 离开目录“/usr/local/src/libiconv-1.14/srclib”
make: *** [all] 错误 2
//解决方法
//先清除编译
# make clean
//使用 find 查找 stion.in.h 文件
# find / -name 'stdio.in.h'
//得到文件路径: /usr/local/src/libiconv-1.14/srclib/stdio.in.h
//编辑该文件
# vim /usr/local/src/libiconv-1.14/srclib/stdio.in.h
//通过关键字 gets 找到698 行,将其和695行一同注释
//在编辑模式切换到搜索 先按【Esc】退出编辑,再按【/】 即 按下Esc 然后 :/ gets 搜索
695 /* It is very rare that the developer ever has full control of stdin,
696 so any use of gets warrants an unconditional warning. Assume it is
697 always declared, since it is required by C89. */
698 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

//即
695 /* It is very rare that the developer ever has full control of stdin,
696 so any use of gets warrants an unconditional warning. Assume it is
697 always declared, since it is required by C89.
698 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/

//然后重新编译安装,这回就顺利安装成功
//安装php,这里安装 php5.6.35
//进入到目录 /usr/local/src ,然后创建 php 安装包保存目录 php_download
# cd /usr/local/src
# mkdir php_download
//进入 php_download 目录
# cd php_download
//接下来去php官网下载php安装包(官网下载链接 https://www.php.net/releases/),可以使用 wget 下载或者用ftp工具上传文件
# wget https://www.php.net/distributions/php-5.6.35.tar.gz

//解压压缩包 这里解压压缩包 php-5.6.35.tar.gz
# tar –zxvf php-5.6.35.tar.gz
//进入解压好的压缩目录 【/usr/local/src/php_download/php-5.6.35】
# cd php-5.6.35

//如果想查看更多指令输入
# ./configure --help
//安装php5.6.35
./configure \
--prefix=/usr/local/php/php56 \
--enable-mysqld \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-zlib-dir=/usr/lib\
--with-png-dir=/usr/lib\
--with-jpeg-dir=/usr/lib\
--enable-ftp \
--with-mhash \
--with-iconv \
--disable-debug \
--enable-shared \
--with-gettext \
--enable-session
//php5.6.35安装好了,接下来是把源码包里的 php.ini-development 文件拷贝到php安装的bin目录下并重命名为 php.ini

//无需重新编译安装PHP扩展的方法
//PHP其他扩展。安装这些php模块,例如redis,swoole,yaf,安装过程通常是这样的
//进入解压的源码包目录 我这里是 /usr/local/src/php_download/php-5.6.35
// 进入到 /usr/local/src/php_download/php-5.6.35/ext 找到你需要的模块名,进入文件夹 如 dom 那就进入这个目录
// /usr/local/src/php_download/php-5.6.35/ext/dom
# /usr/local/php/php56/bin/phpize
//出现这个Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script. 是 没有安装 autoconf
//解决方法 # yum –y install autoconf
//查看配置指令
# ./configure --help
//编译安装php模块
# ./configure --with-php-config=/usr/local/php/php56/bin/php-config --enable-dom
# make
# make install
// /usr/local/php/php56/ 这个目录是安装好的php的目录。
// 注意:进入模块目录后 没有执行 /usr/local/php/php56/bin/phpize 这个命令的时候模块里面没有 ./configure 文件
执行后才出现

这样 php 模块安装成功,接下来就是在php.ini 文件配置引用该模块,为了方便配置我用ftp工具把改文件下载下来编辑,配置 extension_dir 路径
extension_dir = "/usr/local/php/php56/lib/php/extensions/no-debug-non-zts-20131226"

extension=dom.so
//与安装好的Apache 关联配置,我安装的Apache 的路径在 /usr/apache24 ,配置文件路径 /usr/apache24/conf/httpd.conf
//开启 rewrite_module ,把前面的 # 号去掉

在文件中添加如下配置:
<IfModule fcgid_module>
#################### php 多版本 start ##########
#### 在文件扩展名与特定的处理器之间建立映射(一旦将下面定义放在你的http.conf文件中,所有包含.fcgi,.php扩展名的文件,都会被当成是FCGID程序)
AddHandler fcgid-script .fcgi .php
#### php.ini文件位置
# FcgidInitialEnv PHPRC "/usr/local/php/php56/bin"
#### 设置PHP_FCGI_MAX_REQUESTS大于或等于 FcgidMaxRequestsPerProcess ,防止php-cgi进程在处理完所有请求前退出
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#### php-cgi每个进程的最大请求数
FcgidMaxRequestsPerProcess 1000
#### php-cgi最大的进程数
FcgidMaxProcesses 15
#### 最大执行时间
FcgidIOTimeout 120
FcgidIdleTimeout 120
#### 在给定的文件扩展名与特定的内容类型之间建立映射(一旦将下面定义放在你的http.conf文件中,所有包含.php扩展名的文件,都会被当成是PHP类型的程序)
AddType application/x-httpd-php .php
#### 每个虚拟主机可以最大开启多少个FCGI进程
# FcgidMaxProcessesPerClass 100
#### 定义cgi请求的长度, 上传文件的最大尺寸 100MB
FcgidMaxRequestLen 104857600
#################### php 多版本 end ##########
</IfModule>
配置 apache 虚拟主机 引用如下配置文件路径

ServerRoot "/usr/apache24" 可以看出服务器的安装路径是 /usr/apache24,那么上图中 conf/extra/httpd-vhosts.conf
指的是引入配置文件的路径在 /usr/apache24/conf/extra/httpd-vhosts.conf 起始就是以/usr/apache24路径为基准,进行相对路径引用配置文件
接下来配置 httpd-vhosts.conf 这个文件
<VirtualHost *:8080>
#ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/wwwroot/php56_test"
ServerName localhost
#ServerAlias admin.xxx.cn api.xxx.cn
#ServerAlias *.xxx.xxx
##### php.ini 文件位置 #####
FcgidInitialEnv PHPRC "/usr/local/php/php56/"
##### php-cgi路径 #####
FcgidWrapper "/usr/local/php/php56/bin/php-cgi" .php
##配置默认文件
<IfModule dir_module>
DirectoryIndex index.php index.html index.htm
</IfModule>
<Directory "/wwwroot/php56_test">
#Options Indexes FollowSymLinks
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
#Allow from all
#Order deny,allow
</Directory>
</VirtualHost>
虚拟主机配置了 8080 端口,记得让apache监听8080 端口, Listen 8080

在 /wwwroot/php56_test 网站根目录下 添加文件 index.php ,输入内容查看php信息:
<?php
phpinfo();

把apache 的配置文件上传保存,然后重启Apache # systemctl restart httpd 如下图:

到此 php5.6.35安装好了,并且与apache 关联,安装别的版本类似php5.6.35 这样安装,我使用的是apache mod_fcgid 模块,这样就可以使用多个版本的php了
== 2024-02-04 更新start ==
「CentOS7.8系统下,安装PHP」
//整理yum命令安装php需要的常用库[2]
# yum -y 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 zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-deve zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel libwebp libwebp-devel
下载软件libiconv-1.17:
https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
在php官网下载安装包,下载地址:https://www.php.net/releases/ ,找对应的版本下载。
下载php-7.0.32.tar.gz 地址链接:
https://www.php.net/distributions/php-7.0.32.tar.gz
下载php-7.1.32.tar.gz 地址链接:
https://www.php.net/distributions/php-7.1.32.tar.gz
下载php-7.2.32.tar.gz 地址链接:
https://www.php.net/distributions/php-7.2.32.tar.gz
下载php-7.3.32.tar.gz 地址链接:
https://www.php.net/distributions/php-7.3.32.tar.gz
无法安装: yum install automake
出现错误:configure: error: webp/decode.h not found. 解决:yum install –y libwebp libwebp-devel 。
== 2024-02-04 更新end ==