Back

Linux 编译安装php

Small color 2016年10月11日

首先装装坏境,不管有没有用,装了再说
如果使用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
安装好后如下图:
1214_compressed.jpg

现在还无法启动php 还要配置一番

添加环境变量
vim /etc/profile
PATH=$PATH:/usr/local/php/bin #我这里的目录是php注意别写错
source /etc/profile

此时执行

php -v #即可看到php信息
2141_compressed.jpg

修改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文件权限是否可执行,一般都不需要修改权限。只是要注意下。
就可以重启看看是否可以自动启动了

注意:
  • 担心迷路?请收藏备用网址:smallcolor.top  备用网址2:smallcolor.org
  • 免责声明:本站为非营利性站点,本网站提供的资源均系收集于各大外网网站,本网站只提供web页面服务,并不提供影片资源存储和下载,也不参与录制、上传、翻译。
  • Disclaimer: This site for non-profit site, this website provides the resources are collected in each big web site, the site provides web page service only, does not provide video resources storage and download, or recording, upload, translation will not be involved.
  • 本站严格遵守(CC BY-NC-SA 4.0)国际许可协议,所有信息我都注明来源。
  • This website strictly complies with the (CC BY-NC-SA 4.0) international license agreement and indicates the source of all information.
  • 若本站收录的节目无意侵犯了贵司版权,请给下面邮箱地址来信(或者留言),我们会及时处理和回复,谢谢!
  • If the content included in this website is not intended to infringe your copyright, please send a letter to the following email (or message), we will promptly handle and reply, thank you for your support!
  • 富强、民主、文明、和谐,自由、平等、公正、法治,爱国、敬业、诚信、友善。
  • emoji_u1f625.pngemoji_u1f629.pngicon_twisted.pngemoji_u1f62a.pngemoji_u1f61c.pngemoji_u1f64d.pngemoji_u1f618.pngemoji_u1f611.pngicon_cool.pngemoji_u1f61e.pngicon_wink.pngicon_neutral.pngicon_smile.pngemoji_u1f646.pngemoji_u1f620.pngemoji_u1f626.pngemoji_u1f623.pngicon_razz.pngemoji_u1f603.pngemoji_u1f62b.pngicon_eek.pngemoji_u1f605.png
    >Submit

      商业友情链接:

    >