编译安装php

多赚钱,离傻逼们远一点

Apache

  • 先从官方网站下载php7,并且解压

    1
    2
    wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror
    tar zvxf php-7.0.0.tar.gz# cd php-7.0.0
  • 接下来要进行编译前的配置,需要提供apxs参数

    1
    /configure --prefix=/usr/local/php7 \--with-config-file-path=/usr/local/php7/etc \--with-config-file-scan-dir=/usr/local/php7/etc/php.d \--with-apxs2=/usr/local/apache/bin/apxs \--with-mcrypt=/usr/include \--enable-mysqlnd \--with-mysqli \--with-pdo-mysql \--with-gd \--with-iconv \--with-zlib \--enable-xml \--enable-shmop \--enable-sysvsem \--enable-inline-optimization \--enable-mbregex \--enable-mbstring \--enable-ftp \--enable-gd-native-ttf \--with-openssl \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-zip \--enable-soap \--without-pear \--with-gettext \--enable-session \--with-curl \--with-jpeg-dir \--with-freetype-dir \--enable-opcache

    注意配置--prefix 安装文件位置, --with-config-file-path 配置文件位置, --with-apxs2整合apache,

  • 编译

    1
    2
    make
    make install
  • 配置apache
    如果上面的编译安装正常,由于我们配置了apxs选项,所以在编译的时候,make会对apache的apxs进行调用操作,结果就是在apache的安装目录下的modules目录下生成libphp7.so,并在apache的配置文件httpd.conf中增加一行

    1
    2
    3
    4
    5
    LoadModule php7_module        modules/libphp7.so
    ```一看就明白了,就是让apache去加载一个新的libphp7.so模块。但是我们仍然要对`httpd.conf`进行修改,重新配置apache。找到LoadModule php,你会发现,竟然出现了两行LoadModule,同时加载了php5和php7,如下:
    ```php
    LoadModule php5_module modules/libphp5.so
    LoadModule php7_module modules/libphp7.so

    我们把第一行给注释掉,而且还要增加一个PHPIniDir的配置项,即修改为如下:

    1
    2
    3
    #LoadModule php5_module        modules/libphp5.so
    LoadModule php7_module modules/libphp7.so
    PHPIniDir /usr/local/php7/etc

    重启apache,现在可以写一个phpinfo去试试看了。
    或者这样修改配置文件

    1
    2
    3
    Apache不认识xxx.php后缀
    打开Apache配置文件,增加
    AddType application/x-httpd-php .php

Nginx

  • 先从官方网站下载php7,并且解压

    1
    2
    wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror
    tar zvxf php-7.0.0.tar.gz# cd php-7.0.0
  • 接下来要进行编译前的配置,我们不提供apxs参数,我们提供php-fpm相关参数

    1
    # ./configure --prefix=/usr/local/php7 \--with-config-file-path=/usr/local/php7/etc \--with-config-file-scan-dir=/usr/local/php7/etc/php.d \--with-mcrypt=/usr/include \--enable-mysqlnd \--with-mysqli \--with-pdo-mysql \--enable-fpm \--with-fpm-user=nginx \--with-fpm-group=nginx \--with-gd \--with-iconv \--with-zlib \--enable-xml \--enable-shmop \--enable-sysvsem \--enable-inline-optimization \--enable-mbregex \--enable-mbstring \--enable-ftp \--enable-gd-native-ttf \--with-openssl \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-zip \--enable-soap \--without-pear \--with-gettext \--enable-session \--with-curl \--with-jpeg-dir \--with-freetype-dir \--enable-opcache
  • 配置无误后执行

    1
    2
    make
    make install
  • 调整php配置
    默认安装好之后,你会发现/usr/local/php7/etc下面没有php.ini文件,这个去哪里要呢?在php7的源码安装包都有。

    1
    2
    3
    4
     cd /usr/src/php-7.0.0/# ls
    ```可以看到有两个php.ini-xxx文件,我们可以分别vi打开来看下,一个是产品模式,一个是开发模式。
    ```php
    cp php.ini-production /usr/local/php7/etc/php.ini# vi /usr/local/php7/etc/php.ini
  • 启用php-fpm服务
    上面我们在编译php7的时候,已经将fpm模块编译了,那么接下来,我们要启用php-fpm。但是默认情况下它的配置文件和服务都没有启用,所以要我们自己来搞定。
    搞定配置文件:

    1
    2
    3
    cd /usr/local/php7/etc
    mv php-fpm.conf.default php-fpm.conf
    mv php-fpm.d/www.conf.defualt php-fpm.d/www.conf
  • php-fpm的服务载入
    我们希望使用service php-fpm start|stop|restart这些操作来实现服务的重启,但没有像nginx那么复杂,php编译好之后,给我们提供了一个php-fpm的程序,不需要我再编写分享了。这个文件放在php编译源码目录中:

    1
    2
    3
    4
    5
    6
    cd /usr/src/php-7.0.0/sapi/fpm
    ls
    cp init.d.php-fpm /etc/init.d/php-fpm
    chmod +x /etc/init.d/php-fpm
    chkconfig --add php-fpm#
    chkconfig php-fpm on

    通过上面这个操作,我们就可以使用

    1
    sevice php-fpm start

    来启用php-fpm了。用

    1
    ps -ef | grep php-fpm

    看看进程吧。

  • 查看php版本

    1
    2
    3
    ./bin/php -v


  • nginx代理php实现访问
    php-fpm走的是127.0.0.1:9000,外网是无法访问的,而且我们也不可能直接通过php-fpm给外网提供服务,我们用nginx去代理9000端口执行php。
    我们需要在nginx的配置文件中增加代理的规则,即可让用户在访问80端口,请求php的时候,交由后端的fpm去执行,并返回结果。

    1
    vi /usr/local/nginx/conf/nginx.conf

    那么怎么代理php-fpm呢?

    1
    2
    3
    4
    5
    6
    7
    location ~ \.php$ {
    root html;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    这样就OK了,重新载入nginx配置即可

    1
    service nginx reload

https://www.tangshuang.net/1774.html