首先装装坏境,不管有没有用,装了再说
如果使用yum命令被kill,可能是安装了不正确的epel-release库
yum remove epel-release
输入确认删除旧的epel库,然后执行:
yum update
检查:
yum list openldap
yum list openldap-devel
安装 :
yum -y install net-tools
yum -y install openldap
yum -y install openldap-devel
yum -y install libicu-devel
yum -y install gcc-c++
yum -y install libxml2
yum -y install libxml2-devel
yum -y install openssl
yum -y install openssl-devel
yum -y install bzip2
yum -y install bzip2-devel
yum -y install libcurl
yum -y install libcurl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install gmp
yum -y install gmp-devel
yum -y install libmcrypt
yum -y install libmcrypt-devel
yum -y install readline
yum -y install readline-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install gd
yum -y install sqlite
yum -y install sqlite-devel
yum -y install net-snmp
yum -y install net-snmp-devel
yum -y install oniguruma
yum -y install oniguruma-devel
yum install -y libwebp
yum install -y libwebp-devel
yum -y install perl-FindBin
首先到官方下载php安装包
官方:https://www.php.net
我这里选择7.1
wget https://www.php.net/distributions/php-7.1.33.tar.gz
首先将压缩包移动到/usr/local目录
mv php-7.1.33.tar.gz /usr/local
cd /usr/local
tar -zxvf php-7.1.33.tar.gz
cd php-7.1.33
开始编译安装:
安装PHP5.3+版本的如下配置
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-magic-quotes --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo
7.0+
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-webp-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-mbstring --enable-intl --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl --disable-fileinfo
7.2+
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --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-mbstring --enable-intl --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl
如果发现编译错误执行这命令:cp -frp /usr/lib64/libldap* /usr/lib/ 再执行上面的./configure ...命令
如果配置出现如下错误:configure: error: mcrypt.h not found. Please reinstall libmcrypt.,意思是,没有查找到mcrytp.h,需要安装libcrytp centos是没有这依赖包的,要手动编译安装
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
tar -zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
mkdir -p /usr/local/libmcrytp
./configure prefix=/usr/local/libmcrytp/ #默认也可以
make
make install
然后再./configure 这堆配置里的底部加入--with-mcrypt=/usr/local/libmcrytp
如果安装usr bin ld cannot find lltdl错误就是没装这个
libmcrypt还有安装个lltdl 不然会“usr bin ld cannot find lltdl”错误
在我们的libmcrypt-2.5.7文件夹里的libltdl 进入后./configure --enable-ltdl-install
make
make install
这时大概率没什么问题了
重新配置,要无任何出错再之下下面安装命令
编译好后开始安装
make
如果执行make安装发现错误如下:
/libxmlrpc/encoding.c:101:undefined reference to 'libiconv_close'
collect2: ld returned 1 exit status
make:*** [sapi/fpm/php-fpm] Error 1
这是就要选择带参数安装了
make ZEND_EXTRA_LIBS='-liconv'
如果执行make安装发现openssl错误,就是你的openssl太新或者太旧,
这个说白了,你目前的系统不太适合安装这个版本的php,新系统对于新版本的php.旧的对应旧的
不过也有办法解决。如下
高级版本的php对应高级openssl,低级的版本对应低级。你要安装所对应的openssl版本,一般yum 默认安装的和你的操作系统有关系的,所以你要安装低级点或者高点,或者你可以不安装phpssl加密。在配置中去掉
到openssl下载对应版本,编译安装
php7.1以下用1.0.x的版本,php7.2用1.1的版本
如:
wget https://www.openssl.org/source/openssl-1.0.2t.tar.gz
tar zxvf openssl-1.0.2t.tar.gz
cd openssl-1.0.2t
./config --prefix=/usr/local/openssl --shared
make && make install
然后备份系统自带的openssl,要替换掉系统的openssl
cp -r /usr/bin/openssl /usr/bin/openssl_bak 【备份也可以不做】
cp -r /usr/include/openssl /usr/include/openssl_bak【备份也可以不做】
编译好的openssl ,我们编译在好的这个文件夹里/usr/local/openssl 把里面的文件,bin/openssl文件,和 include/openssl文件夹,替换到系统的这些文件里即可。也就是我们备份的文件里
系统的/usr/bin/include/openssl=/usr/local/openssl/include/openssl
/usr/bin/openssl=/usr/local/openssl/bin/openssl
重新make 安装
无错误后再执行下面的安装命令
make install
安装好后如下图:
现在还无法启动php 还要配置一番
添加环境变量
vim /etc/profile
PATH=$PATH:/usr/local/php/bin #我这里的目录是php注意别写错
source /etc/profile
此时执行
php -v #即可看到php信息
修改php配置文件,在之前编译的源码包中,找到php.ini-production,复制到/usr/local/php,并改名为php.ini (因为编译安装的时候,指定了php.ini文件所在目录位置。有些编译安装可能把php.ini放在php/etc下,有些放在php/lib下。主要看编译安装的命令)
cp /usr/local/php-7.1.10/php.ini-production /usr/local/php/php.ini
修改php.ini,设置错误信息级别
vim /usr/local/php/php.ini
display_errors = On //原来是off
修改php-fpm配置文件
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php.fpm.conf
去掉pid=run/php-fpm.pid前面的分号
然后复制配置文件
cd ./php-fpm.d
cp www.conf.default www.conf
启动php
/usr/local/php/sbin/php-fpm
如果报错nginx的问题 就去修改www.conf文件 将user=www和group=www两行改成user=nobody和group=nobody
或者创建最小权限用户,这个推荐:
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
这玩意毕竟对外,创建最小用户安全点
查看进程
ps -aux | grep php
如何停止或者重启等等操作如下:
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
具体操作
ps aux|grep php-fpm # 查看进程
root 42891 0.0 0.0 112660 960 pts/3 R+ 16:18 0:00 grep --color=auto php-fpm
上面就显示php的各种信息,进程id是:42891
如果我们要重启就是使用kill -+USR2 +进程ID
kill -USR2 42891
注意,如果是要搭配nginx来网站使用的,就要配置php-cgi的进程数了,否则nginx打开php文件必502错误
我们新安装的php的配置是没有配置任何的进程的。就是那个php.fpm.conf 文件配置的,
修改php-fpm配置文件
我们刚才安装的php安装在php的文件夹里
cd /usr/local/php/etc
vim php.fpm.conf #你也可以下载这个文件到电脑,用编辑器添加好再上传到服务器,主要操作方便点
文件里的那些全部删除的,全部删除它,且php-fpm.d文件夹也可以删除了,里面的代码包含php-fpm.d里的东西。
写入如下代码,
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 16
pm.start_servers = 4
pm.min_spare_servers = 3
pm.max_spare_servers = 12
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
保存文件
重启php即可
访问网站就不会502错误了
我这里简单说下上面的配置的东西
pm.max_children 就是进程的最大总进程数
pm.start_servers php刚刚启动的进程数
pm.min_spare_servers 空闲时最小的进程数
pm.max_spare_servers 满载的进程数,注意这个进程数不过设置超总进程数也就是:pm.max_children的数量
如果你的网站502了就是满载了。
这个进程数改设置多少具体看自己服务器配置,详细说明可百度查看!
还有重要的一点是listen 这个配置,
php-fpm有两种listen方式,一种是通过端口来操作,一种是sock文件。
我们下面说的是以sock文件来连接php ,你也可以使用nginx用端口方式来连接php解析!
要注意这个问题
这里设置的路径,会在tmp文件夹里生成php-cgi.sock文件夹,nginx调用这个文件夹的路径就可解析php,而不是访问php文件不会解析而是下载。
nginx配置里的解析php文件路径要和listen 这个配置的配置一模一样。具体如何配置可自行百度。
如果配置好了,还无法解析php那就要看是否是路径坏境问题了,有些系统安装了php可能是权限等问题访问不到/tmp/这个路径,所以生成不了路径,因为这个路径是快捷路径。这个路径是绝对路径是/var/tmp
在php配置里的listen 里加上/var 。然后重启php, 然后到tmp里查看是否生成了php-cgi.sock文件夹,如果生成了php坏境基本没问题了,剩下的就是nginx调用这个文件夹的配置了
下面列出nginx调用这个文件夹的代码
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
nginx里设置上面这些代码即可解析php文件
fastcgi_pass unix: 这里的就是对应php设置listen的路径。
你也可以把这些代码保存到一个文件以.conf的文件里。
这样你就可在需要调用的配置里加载这个文件,就可解析php
include 你设置的文件名.conf; 在你需要加载php的网站里设置添加这个文件即可。
如果要配置开机启动等等,自行百度
配置简单的开机启动方法
修改rc.local,这个文件在开机后会加载一次里面的命令,相当与sh脚本,我们可以在该文件中可以插入一些自定义的启动和初始化命令
文件路径:/etc/rc.d/rc.local
我们在里面最后加入php启动命令即可
/usr/local/php/sbin/php-fpm
加入上面的命令,保存。
注意看看rc.local文件权限是否可执行,一般都不需要修改权限。只是要注意下。
就可以重启看看是否可以自动启动了