zoukankan      html  css  js  c++  java
  • 编译安装php

      环境:Ubuntu 18.04 LTS

      本文的所有软件包都已经全部上传到github上了,地址如下:

      https://github.com/searchingbeyond/install-php-by-compile

      

    编译安装libxml2

    tar -zxf libxml2-2.7.2.tar.gz
    cd libxml2-2.7.2/
    ./configure --prefix=/usr/local/libxml2
    make -j 3
    make install
    

      

    编译安装zlib

    tar -zxf zlib-1.2.11.tar.gz 
    cd zlib-1.2.11/
    ./configure --prefix=/usr/local/zlib
    make -j 2
    make install
    

      

    编译安装bzip2

    tar -zxf bzip2-1.0.6.tar.gz 
    cd bzip2-1.0.6/
    make 
    make install PREFIX=/usr/local/bzip
    

      

      

    编译安装openssl

      openssl的下载地址:http://distfiles.macports.org/openssl/

      操作命令如下:

    tar zxf openssl-1.0.2r.tar.gz
    cd openssl-1.0.2r
    ./config --prefix=/usr/local/openssl
    make && make install

    编译安装curl

    tar -zxf curl-7.64.1.tar.gz curl-7.64.1/
    cd curl-7.64.1/
    ./configure --prefix=/usr/local/curl
    make -j 3
    make install
    

      

    安装libpng

      因为安装GD库需要libpng,所以需要安装它。

      对于libpng,推荐使用命令安装,Ubuntu使用下面的命令安装:

    apt install libpng-dev 
    

      而CentOS可以使用下面的命令安装:

    yum install libpng
    yum install libpng-devel
    

      

       

    编译安装PHP

      首先下载php二进制包,地址如下:http://php.net/releases/

      选择自己要下载的php版本,然后解压之后,编译安装即可。

    wget https://www.php.net/distributions/php-7.1.20.tar.gz
    

      解压下载的源码:

    tar -zxf php-7.1.20.tar.gz
    cd php-7.1.20
    

      

      这里在安装的时候开启了很多模块,可以根据自己的需求增减:

    ./configure 
    --prefix=/usr/local/php  
    --with-config-file-path=/usr/local/php/etc 
    --with-gd  
    --with-gettext  
    --with-kerberos  
    --with-mysqli  
    --with-pcre-regex  
    --with-pdo-mysql  
    --with-pear  
    --with-xmlrpc  
    --with-openssl-dir=/usr/local/openssl  
    --with-zlib-dir=/usr/local/zlib 
    --with-libxml-dir=/usr/local/libxml2  
    --with-curl=/usr/local/curl  
    --with-bz2=/usr/local/bzip  
    --with-mhash 
    --enable-fpm  
    --enable-bcmath  
    --enable-inline-optimization  
    --enable-mbregex  
    --enable-mbstring  
    --enable-opcache  
    --enable-pcntl  
    --enable-shmop  
    --enable-soap  
    --enable-sockets  
    --enable-sysvsem  
    --enable-sysvshm  
    --enable-xml  
    --enable-zip
    

      

      如果在执行过程中出错,可以参考:https://www.cnblogs.com/-beyond/p/9813717.html

      

      编译并安装

    make -j 3
    make install

      到这个时候,php就已经安装成功了,但是在命令行中输入php后,提示并没有安装php,那是因为没有添加php的路径。

    php.ini

      注意,通常php.ini是保存在php安装路径下的lib目录下,但是通过源码编译的方式安装的时候,并不会生成配置文件,而配置文件是在源码中。

    ls /usr/local/src/php-7.1.20/php.ini*
    php.ini-development  php.ini-production

      将源码中的配置文件拷贝到php的安装路径下的etc目录下

    cp /usr/local/src/php-7.1.20/php.ini-development /usr/local/php/etc/php.ini
    

    添加php二进制文件的路径

      打印你的PATH环境变量,

    -> # echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
    

      想在命令直接输入php,而不是输入/usr/local/php/bin/php运行php,有两种方法:

      方法1:直接将php的路径添加到PATH中即可

    -> #  export PATH=$PATH:/usr/local/php/bin
    -> #  echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/usr/local/php/bin
    

      注意Linux中,全局变量的作用范围,以及持久性,如果要持久有效,可以保存到/etc/profile,$HOME/.bash_profile,或者另外几个配置文件中。

      方法2:创建链接(一般创建软连接)

      软链接可以保存在PATH中的bin或者sbin目录中,一般自己安装的软件软链接是保存在/usr/local/sbin中。

    -> # ln -s /usr/local/php/bin/php /usr/local/sbin/php
    

      

    测试

      创建一个php文件:

    <?php
    	phpinfo();
    ?>
    

      然后使用php命令执行该文件,打印php信息:

    -> # php index.php
    

    启动php-fpm

      php-fpm在之前使用--enable-fpm参数时,就已经将php-fpm安装了,但是,php-fpm并不是想php一样启动。

      php-fpm可执行程序的路径是在php安装目录下的sbin/php-fpm。比如上面我的php安装路径是/usr/local/php,那么php-fpm的路径就是/usr/local/php/sbin/php-fpm。

      php-fpm默认监听的端口是9000。

        php-fpm的配置文件适合php的配置文件在一起,在/usr/local/php/etc/php-fpm.conf,但是默认的php-fpm的配置文件是php-fpm.conf.default,所以需要将文件名修改为php-fpm.conf,否则会出现如下错误:

    -> # /usr/local/php/sbin/php-fpm
    [05-Aug-2018 17:19:27] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf': No such file or directory (2)
    [05-Aug-2018 17:19:27] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
    [05-Aug-2018 17:19:27] ERROR: FPM initialization failed
    

      接着,进行如下操作:

    -> # #创建名称为www的user和group。
    -> # groupadd www
    -> # useradd -g www www
    -> #
    -> # cd /usr/local/php
    -> # cp etc/php-fpm.conf.default etc/php-fpm.conf
    -> # cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
    -> #
    -> # #修改php-fpm的配置文件内容,取消pid = run/php-fpm.pid这一行的注释,让其有效
    -> # vi etc/php-fpm.conf
    -> # 
    -> # #将/usr/local/php/etc/php-fpm.d/www.conf中user和group修改为www。
    -> # vi etc/php-fpm.d/www.conf
    

      尝试启动php-fpm

    -> # /usr/local/php/sbin/php-fpm
    -> #
    -> # #查看php-fpm的状态
    -> # ps -ef | grep php-fpm
    root     12200     1  0 23:00 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
    1002     12201 12200  0 23:00 ?        00:00:00 php-fpm: pool www
    1002     12202 12200  0 23:00 ?        00:00:00 php-fpm: pool www
    root     13365  1221  0 23:22 pts/0    00:00:00 grep --color=auto php-fpm
    -> #
    -> # #查看php-fpm占用的端口
    -> # lsof -i:9000
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    php-fpm 13499 root    7u  IPv4 148862      0t0  TCP VM_0_8_centos:cslistener (LISTEN)
    php-fpm 13500  www    5u  IPv4 148862      0t0  TCP VM_0_8_centos:cslistener (LISTEN)
    php-fpm 13501  www    5u  IPv4 148862      0t0  TCP VM_0_8_centos:cslistener (LISTEN)
    

      从上面的php-fpm进程可以看出,php-fpm的运行模式是master-worker模式,

        1、FPM 的 master 进程接收到请求

        2、master 进程根据配置指派特定的 worker 进程进行请求处理,如果没有可用进程,返回错误,这也是我们配合 Nginx 遇到502错误比较多的原因。

        3、worker 进程处理请求,如果超时,返回504错误

        4、请求处理结束,返回结果

    关闭php-fpm的方式

    #平滑关闭php-fpm
    kill -QUIT `cat /usr/local/php/var/run/php-fpm.pid`
    
    #强制立即关闭php-fpm
    kill -TERM `cat /usr/local/php/var/run/php-fpm.pid`
    

      

  • 相关阅读:
    邓亚萍:我是如何学英语的(一种学习方法)
    qemu-nbd方式挂载qcow2镜像
    jquery 手机触摸事件
    用纯CSS创建一个三角形
    什么是闭包(closure),为什么要用它?
    javascript创建对象的几种方式
    如何垂直居中div?面试经常问到
    网页布局——左侧固定,右侧自适应
    python性能:不要使用 key in list 判断key是否在list里
    python实现的跳点寻路算法(JPS)
  • 原文地址:https://www.cnblogs.com/-beyond/p/9343401.html
Copyright © 2011-2022 走看看