Ubuntu18.04.5编译安装php-5.6.40以及后期使用pecl安装扩展

下载php5.6.40

  1. 进入 /usr/local/src 目录 cd /usr/local/src
  2. 到官网下载php5.6.40的源码压缩包
    https://www.php.net/distributions/php-5.6.40.tar.gz
sudo wget https://www.php.net/distributions/php-5.6.40.tar.gz
  1. 解压并进入源码目录
sudo tar -xzvf php-5.6.40.tar.gz
cd php-5.6.40

一、安装依赖

sudo apt install unzip \
gcc g++ \
openssl \
libssl-dev \
iptables \
libpcre3-dev \
libpam0g-dev \
libxslt1-dev \
libxml2-dev \
perl at gperf \
curl libcurl4 libcurl4-openssl-dev \
libzip-dev \
libbz2-dev \
libgd-dev \
libmcrypt-dev libtidy-dev \
libgeoip-dev \
libatomic-ops-dev \
zlib1g-dev \
libstdc++-5-dev \
libsnmp-dev \
snmp-mibs-downloader \
libgmp-dev \
autoconf

编译过程中可能会出现openssl版本不兼容的问题

首先查看openssl版本

openssl version

如果openssl版本大于 1.0.2,那就需要下载1.0.2版本的openssl编译安装,因为 php5.6 不兼容1.1.1版本的openssl。

下载openssl1.0.2源码:https://www.openssl.org/source/openssl-1.0.2k.tar.gz

cd /usr/local/src
sudo wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
sudo tar -xzvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
sudo ./config
sudo make & make install

openssl会安装在 /usr/local/ssl

二、设置编译配置项

cd /usr/local/src/php-5.6.40

sudo ./configure --prefix=/usr/local/php5.6 \
--with-openssl=/usr/local/ssl \
--with-gd \
--with-fpm-user=nobody \
--with-fpm-group=nobody \
--with-mysqli \
--with-pdo-mysql \
--with-curl \
--with-tidy \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-pear \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-gettext \
--with-mhash \
--with-pcre-regex  \
--with-kerberos \
--with-iconv \
--with-snmp \
--with-gmp \
--enable-bcmath \
--with-bz2 \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-sysvmsg \
--enable-sysvshm \
--enable-wddx \
--enable-xml \
--enable-zip \
--enable-inline-optimization \
--enable-session \
--enable-shared \
--enable-pcntl \
--enable-mbregex  \
--enable-gd-jis-conv \
--enable-fpm \
--enable-opcache \
--enable-dba 

其他参数(可选):
–with-libdir 其实./configure 默认在 /usr/lib 查找各种库,这个参数可以指定在哪里查找各种库,比如:

--with-libdir=/usr/lib64   在 /usr/lib64 查找各种需要的库

可能会出现的问题

  1. Please reinstall the libcurl distribution - easy.h should be in /include/curl
将 /usr/include/x86_64-linux-gnu/curl 建立一个软链接放在 /usr/include

sudo ln -s /usr/include/x86_64-linux-gnu/curl /usr/include/curl
  1. Unable to locate gmp.h
将 /usr/include/x86_64-linux-gnu/gmp.h 创建软链接放在 /usr/include

sudo ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h
  1. not found libXpm.(a|so)
    加上这个参数 --with-xpm-dir 就会出现找不到 libXmp 的问题,就算安装了 libXmp 也会出现,手动指定 libXmp 的路径也无法解决

  2. 编译阶段,出现 openssl 的问题,基本是openssl的版本太高了,需要安装 1.0.2版本 的openssl,然后重新 ./configure ,用 --with-openssl 参数指定 openssl的位置

--with-openssl=/usr/local/ssl

三、编译安装

编译

sudo make

安装

sudo make install

四、启动php-fpm

安装成功之后,就到了配置php-fpm的阶段了。

先进入php目录

cd /usr/local/php5.6

移动 php.ini 配置文件

首先看看php默认读取的php.ini是在哪个位置

./bin/php --ini

输出有:
Configuration File (php.ini) Path => /usr/local/php5.6/lib

说明 php 会自动读取放在 /usr/local/php5.6/lib 的 php.ini 配置文件,那我们下面就把 php.ini 放在 /usr/local/php5.6/lib 里面。

在php的源码目录里面有一个 php.ini-development 文件,将这个文件复制到我们现在所在目录的 lib 文件夹下,命名为 php.ini

sudo cp /usr/local/src/php-5.6.40/php.ini-development ./lib/php.ini

然后就可以通过修改 php.ini 来开启各种需要的扩展,修改各种配置了。

在还没修改 php.ini 之前执行 ./bin/php -m 可以查看 php 当前有什么模块,这些模块都是随着 php 一起编译进去的,不用在 php.ini 开启。

配置 php-fpm

查看当前路径的 etc 目录,有一个 php-fpm.conf.default 文件,这个文件是 php-fpm 配置的例子,里面有各个参数的说明。

现在我们在这个 etc 目录创建一个 php-fpm.conf 文件,将一些简单参数写进入:

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log

include=etc/fpm.d/*.conf

参数说明:

pid = run/php-fpm.pid          // 在php-fpm启动后,会将pid写在 /usr/local/php5.6/var/run/php-fpm.pid 这个文件
error_log = log/php-fpm.log    // php-fpm的错误日志
include=etc/fpm.d/*.conf       // 引入其他配置文件

既然要引入其他的配置文件,那么就要创建配置文件才行,在当前目录的 etc 里创建 fpm.d 目录,再在里面创建 test.conf

cd /usr/local/php5.6
sudo mkdir ./etc/fpm.d
sudo touch ./etc/fpm.d/test.conf

在 test.conf 写入下面的内容

[test]
listen = 127.0.0.1:9000

user = php-fpm
group = php-fpm

pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 5

;记录日志
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /usr/local/php5.6/logs/cartechpro9000-fpm-err.log
php_flag[display_errors] = off
php_admin_value[memory_limit] = 256M
pm.max_requests = 3000
request_terminate_timeout = 300

里面有两个参数 ,name 和 group,这两个参数的作用是指定系统用哪个用户去运行 php-fpm的工作进程,默认是不允许用 root 用户去运行功能进程的,因为 root 的权限太大,万一某个php脚本要删除系统文件,成功执行就出事了。所以要想用 root 执行工作进程,需要另外配置。

php-fpm 启动后,启动的是主进程,主进程再根据配置,创建n个工作进程,用 name和group 指定的用户去运行。
主进程监听到请求,就把请求分配给某个工作进程去处理,处理完再返回。

在上面的配置中,name和group配置的是名为 php-fpm 的用户,所以要先查查系统是否有 php-fpm 这个用户存在,不存在则需要创建

id -u php-fpm

如果用户存在,则会返回用户的id,不存在就会提示 “id: ‘php-fpm’: no such user”

如果 php-fpm 用户不存在,则创建: sudo useradd php-fpm

启动 php-fpm

到这里,php-fpm 已经配置好了,可以启动了

sudo ./sbin/php-fpm

用 ps 命令查看一下

ps -aux | grep php

在这里插入图片描述

关闭 php-fpm

方法一:按进程名称关闭

sudo pkill  php-fpm

这种方法可以关闭所有 php-fpm 进程,如果系统里跑着 php5.6 和 php7.4,这种方法会把 php7.4 的 php-fpm 也关掉。

方法二:按进程 pid 关闭

上面提到的配置文件 php-fpm.conf ,里面有个配置项

pid = run/php-fpm.pid

如果有配置这个配置项,那么,可以在 /usr/local/php5.6/var/run/ 下面找到 php-fpm.pid 这个文件,这个文件里面就写着当前这个 php-fpm 主进程的 pid,接下来我们就可以用这个 pid 来关闭 php-fpm 了。

sudo kill -INT `cat /usr/local/php5.6/var/run/php-fpm.pid`

注意了,上面包裹着cat /usr/local/php5.6/var/run/php-fpm.pid 的不是单引号,而是反引号,在键盘ESC键的下面。

如果有多个版本的 php-fpm 在运行,这种方法就可以只关闭某个版本的 php-fpm

重启 php-fpm

方法一:kill掉进程重新启动

sudo kill -INT `cat /usr/local/php5.6/var/run/php-fpm.pid`
sudo /usr/local/php5.6/sbin/php-fpm

方法二:用 kill -USR2

sudo sudo kill -USR2 `cat /usr/local/php5.6/var/run/php-fpm.pid`

五、pecl安装扩展

安装扩展使用 pecl ,这个东西在 /usr/local/php5.6/bin

获取证书

首先,pecl 安装扩展,是在 http://pecl.php.net/ 查找资源的,下载资源需要用https,所以要先配置好证书。

下载最新的证书:

cd /usr/local/src
sudo wget http://curl.haxx.se/ca/cacert.pem

查看 php 默认读取的证书位置

php -r "print_r(openssl_get_cert_locations());"

我的输出是这样的:

Array
(
    [default_cert_file] => /usr/local/ssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /usr/local/ssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /usr/local/ssl/private
    [default_default_cert_area] => /usr/local/ssl
    [ini_cafile] => 
    [ini_capath] => 
)

第一个参数 [default_cert_file] 就是证书位置。

接下来将下载到的证书移动到对应的位置

sudo mv cacert.pem /usr/local/ssl/cert.pem

配置pecl
配置 pecl 的 php_ini 路径

cd /usr/local/php5.6/bin
sudo ./pear config-set php_ini /usr/local/php5.6/lib/php.ini

例子:安装redis扩展

查询 redis 扩展

sudo ./pecl search redis

我查到的是 5.3.3 版本的 redis 扩展

安装 redis 扩展

sudo ./pecl install redis

会提示 php 版本太低,5.3.3 版本的redis扩展,要求php最低版本是7.0,所以安装失败了。

要想安装指定版本的扩展,需要在 http://pecl.php.net/ 自己找需要的扩展和合适的版本,比如 redis 扩展,php5.6 最高可用的版本是 2.2.8,在下图圈住的地方,点鼠标右键->复制链接地址,然后执行下面这句安装:

sudo ./pecl install <刚刚复制到的链接地址>

例如:

sudo ./pecl install http://pecl.php.net/get/redis-2.2.8.tgz

或者更简易的写法

sudo ./pecl install redis-2.2.8

在这里插入图片描述

pecl 安装扩展是下载扩展的源码,然后编译安装,所以系统需要安装有 autoconf,如果没有,则会在安装扩展时编译出错

直接用 apt 就可以安装 autoconf :sudo apt install autoconf

如果有正确配置pecl的php_ini这个配置项,那么安装完后,pecl 会自动在 php.ini 加上这个扩展的配置 : extension=redis.so,如果没有自动加上这个扩展配置,那就手动在php.ini加上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值