php编译安装与配置_php编译后面--profile所对应的路径是-程序员宅基地

技术标签: 服务环境搭建与配置  

php编译安装与配置
===========================================
官网:http://php.net/
官网下载:http://php.net/downloads.php
===========================================


一:了解与准备

1.1:Apache(httpd)  nginx 与 php 连接方式:
    httpd与php:
        1:php 作为 httpd 模块
        2:fastcgi(php-fpm)
        3:cgi(此处不讲解)
    nginx与php:
        1:fastcgi(php-fpm)

1.2:PHP安装与依赖:
    ~]# yum -y install gcc gcc-c++ libxml2 libxml2-devel bzip2 bzip2-devel libmcrypt libmcrypt-devel openssl openssl-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel readline readline-devel libxslt-devel perl perl-devel psmisc.x86_64 recode recode-devel libtidy libtidy-devel mcrypt mhash

1.3:备注:
    1:上面的依赖基本解决所需要的依赖。
    2:编译安装完成后可以增减所支持的php模块,此处所编译的模块已经非常完备。
    3:需要编译单个模块,查看php模块编译方式:php模块编译
    4:下面编译安装的配置选项:
        --prefix=/usr/local/php7    主程序文件路径
        --sysconfdir=/usr/local/php7/etc    配置文件路径(默认在编译后的 etc 目录)无需修改
        --with-config-file-path=/usr/local/php7/lib    php.ini 文件路径(默认在编译后的 lib 目录) 无需修改
        --with-apxs2=/usr/local/httpd/bin/apxs  以 httpd 模块编译时需要指定 httpd 的 apxs 文件路径。
        其他的配置可以按自己需求指定,这几个选项也可以使用默认配置。
    5:php7移除了 mysql 扩展,php7仅能是用 mysqli 和 pdo_mysql。php5可以使用。
        php5编译时加入选项:--with-mysql 。详情查看下面的 PHP与MariaDB(mysql)连接
    6:此处以 CentOs7 编译 php7 为示例,配合讲解php5安装的要点。
    7:php.ini 文件是在包目录下的 php.ini-development(开发), php.ini-production(生产)
        编译完成后选择自己需要的 php.ini 文件 复制到 --with-config-file-path 指定的目录。
        如果编译时为指定此选项,编译完成配置并启动nginx和php查看 phpinfo() 函数所指定的 php.ini 文件路径:Configuration File (php.ini) Path
        默认为php目录下的 lib 目录。
    8:PHP安装与依赖中 psmisc.x86_64 是 killall 命令的包名,以便最小化安装时终止进程。


二:php编译与配置:

2.1: httpd 模块
        备注:需要事先存在httpd ,编译指定 apxs 文件位置。此处以--with-apxs2=/usr/local/httpd/bin/apxs 作为演示。
        php7:
                ~]# ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/httpd/bin/apxs --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mhash --with-openssl --with-zlib --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib --enable-mbstring --with-mcrypt --enable-sockets --with-iconv-dir --with-xsl --enable-zip --with-pcre-dir --with-pear --enable-session  --enable-xml --with-freetype-dir --enable-gd-jis-conv --enable-inline-optimization --enable-shared --enable-bcmath --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbregex --enable-pcntl --with-xmlrpc --with-gettext --enable-exif --with-readline --with-recode --with-tidy

        php5.6:(仅增加了选项 --with-mysql=mysqlnd)
                ~]# ./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mhash --with-openssl --with-zlib --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib --enable-mbstring --with-mcrypt --enable-sockets --with-iconv-dir --with-xsl --enable-zip --with-pcre-dir --with-pear --enable-session --enable-xml --with-freetype-dir --enable-gd-jis-conv --enable-inline-optimization --enable-shared --enable-bcmath --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbregex --enable-pcntl --with-xmlrpc --with-gettext --enable-exif --with-readline --with-recode --with-tidy

2.2:fastcgi php-fpm 模式
        php7:
                ~]# ./configure --prefix=/usr/local/php7 --enable-fpm --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mhash --with-openssl --with-zlib --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib --enable-mbstring --with-mcrypt --enable-sockets --with-iconv-dir --with-xsl --enable-zip --with-pcre-dir --with-pear --enable-session  --enable-xml --with-freetype-dir --enable-gd-jis-conv --enable-inline-optimization --enable-shared --enable-bcmath --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbregex --enable-pcntl --with-xmlrpc --with-gettext --enable-exif --with-readline --with-recode --with-tidy

        php5.6:(仅增加了选项 --with-mysql=mysqlnd)
                ~]# ./configure --prefix=/usr/local/php5 --enable-fpm --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mhash --with-openssl --with-zlib --with-bz2 --with-curl --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib --enable-mbstring --with-mcrypt --enable-sockets --with-iconv-dir --with-xsl --enable-zip --with-pcre-dir --with-pear --enable-session  --enable-xml --with-freetype-dir --enable-gd-jis-conv --enable-inline-optimization --enable-shared --enable-bcmath --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-mbregex --enable-pcntl --with-xmlrpc --with-gettext --enable-exif --with-readline --with-recode --with-tidy

2.3:php.ini 配置文件(在源码包目录下)
    ~]# cp php.ini-production /usr/local/php7/lib/php.ini


2.4:php 作为 httpd 模块
    不需要修改 php 配置,


2.5:fastcgi php-fpm
    # php 5
        ~]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
    备注:php5 需要复制 php-fpm.conf.default 为 php-fpm.conf 即可。查看 php-fpm.conf 监听地址和允许的客户端。

    # php 7
        ~]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
        ~]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
    # 监听地址,默认即可是本机 127.0.0.1 不必修改。
        ~]# vi /usr/local/php7/etc/php-fpm.d/www.conf
            # 监听地址
            listen = 127.0.0.1:9000
            # 允许的客户端
            listen.allowed_clients = 127.0.0.1

2.6:启动与停止
    httpd模块:
        重新加载 httpd 。

    fastcgi:
        ~]# vi /etc/php7/php-fpm.conf
        打开注释:(不打开注释仅能使用 killall php-fpm 关闭 php)
            pid = run/php-fpm.pid

        启动:
            /usr/local/php7/sbin/php-fpm
        立刻终止
            kill -INT `cat /usr/local/php7/var/run/php-fpm.pid`
            kill -TERM `cat /usr/local/php7/var/run/php-fpm.pid`
            killall php-fpm
        平滑终止
            kill -QUIT `cat /usr/local/php7/var/run/php-fpm.pid`
        平滑重启
            kill -USR2 `cat /usr/local/php7/var/run/php-fpm.pid`


2.7:加入环境变量
    ~]# echo 'export PATH=$PATH:/usr/local/php7/sbin:/usr/local/php7/bin' > /etc/profile.d/php.sh
    ~]# .  /etc/profile.d/php.sh
        <!-- export PATH=$PATH:/usr/local/php7/sbin:/usr/local/php7/bin -->

2.8:CentOS 系统服务(/etc/php7/php-fpm.conf 文件 pid = run/php-fpm.pid 注释需要打开:2.6 )
CentOS 6:
    ~]# vi /etc/rc.d/init.d/php-fpm
    ~]# chmod +x /etc/rc.d/init.d/php-fpm
--------------------------file start---------------------------------
#! /bin/sh
# chkconfig: - 84 16
# description:  PHP FastCGI Process Manager

# Source function library.
. /etc/init.d/functions

# Check that networking is up.
. /etc/sysconfig/network

# Additional environment file
if [ -f /etc/sysconfig/php-fpm ]; then
      . /etc/sysconfig/php-fpm
fi

if [ "$NETWORKING" = "no" ]
then
    exit 0
fi

RETVAL=0
prog="php-fpm"
# 可根据版本不同修改 phpfpm pidfile lockfile变量。其他地方不用修改。
phpfpm="/usr/local/php7/sbin/php-fpm"
pidfile=${PIDFILE-/usr/local/php7/var/run/php-fpm.pid}
lockfile=${LOCKFILE-/usr/local/php7/var/run/php-fpm.lock}

start () {
    echo -n $"Starting $prog: "
    dir=$(dirname ${pidfile})
    [ -d $dir ] || mkdir $dir
    daemon --pidfile ${pidfile} ${phpfpm}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch ${lockfile}
}
stop () {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} php-fpm
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ] ; then
        rm -f ${lockfile} ${pidfile}
    fi
}
restart () {
        stop
        start
}
reload () {
    echo -n $"Reloading $prog: "
    if ! ${phpfpm} --test ; then
            RETVAL=6
            echo $"not reloading due to configuration syntax error"
            failure $"not reloading $prog due to configuration syntax error"
    else
        killproc -p ${pidfile} php-fpm -USR2
        RETVAL=$?
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status -p ${pidfile} php-fpm
    RETVAL=$?
    ;;
  restart)
    restart
    ;;
  reload|force-reload)
    reload
    ;;
  configtest)
    ${phpfpm} --test
    RETVAL=$?
    ;;
  condrestart|try-restart)
    [ -f ${lockfile} ] && restart || :
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}"
    RETVAL=2
        ;;
esac
exit $RETVAL
--------------------------file end---------------------------------
    ~]# service php-fpm {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}

CentOS 7:
    ~]# vim /usr/lib/systemd/system/php-fpm.service
--------------------------file start---------------------------------
[Unit]
Description=php-fpm
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/php7/var/run/php-fpm.pid
ExecStart=/usr/local/php7/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
--------------------------file end---------------------------------
    ~]# systemctl (start | restart | reload | stop | enable | disable | status) php-fpm.service


2.8:系统启动服务
    CentOS 6:
        加入 chkconfig 管理:
            ~]# chkconfig --add php-fpm
        开机启动:
            ~]# chkconfig --level 345 php-fpm on
        开机不启动:
            ~]# chkconfig php-fpm off
        查看开机是否启动
            ~]# chkconfig --list php-fpm

    CentOS 7:
        开机启动:
            ~]# systemctl enable php-fpm.service
        开机不启动:
            ~]# systemctl disable php-fpm.service


2.9:加入 man 文档
    CentOS 6:
        ~]# vim /etc/man.config
        MANPATH /usr/local/php7/php/man
    CentOS 7:
        ~]# vi /etc/man_db.conf
        MANDATORY_MANPATH /usr/local/php7/php/man


    备注:然后就可以使用 man 命令查看
        ~]# man php

三:httpd  nginx 与 php 连接

3.1:httpd 模块 php
        要点:
            1:httpd开启模块:
                LoadModule proxy_module modules/mod_proxy.so
                LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

            2:php编译指定 httpd apxs 路径(成为 httpd 模块)
                --with-apxs2=/usr/local/httpd24/bin/apxs

        连接:
            ~]# vi /etc/httpd/httpd.conf
            1:添加:(编译时这个默认已经添加)
                LoadModule php7_module        modules/libphp7.so
                #LoadModule php5_module        modules/libphp5.so
            2:添加 index.php:
                <IfModule dir_module>
                    DirectoryIndex index.php index.html
                </IfModule>
            3:文件最后添加:
                <FilesMatch \.php$>
                    SetHandler application/x-httpd-php
                </FilesMatch>
        备注:vhost 也可以应用


3.2:httpd(fastcgi)与 php-fpm
        要点:
            1:httpd开启模块:
                LoadModule proxy_module modules/mod_proxy.so
                LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

            2:php编译开启模块:
                --enable-fpm

        连接方式1:
            ~]# vi /etc/httpd/httpd.conf
                最后添加:
                  # On:正向代理(默认)  Off:反向代理(此处建议使用)
                  ProxyRequests Off
                <FilesMatch \.php$>
                         SetHandler proxy:fcgi://127.0.0.1:9000
                </FilesMatch>

        连接方式2:
            ~]# vi /etc/httpd/httpd.conf
                最后添加:
                  # On:正向代理(默认)  Off:反向代理(此处建议使用)
                  ProxyRequests Off
                <LocationMatch ^(.*\.php)$> 
                    ProxyPass fcgi://127.0.0.1:9000/var/www/html/
                </LocationMatch>

        连接方式3:类型2的改变
            ~]# vi /etc/httpd/httpd.conf
                最后添加:
                  # On:正向代理(默认)  Off:反向代理(此处建议使用)
                  ProxyRequests Off
                  ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/var/www/html/$1


         连接方式设置完后再添加 index.php:
                <IfModule dir_module>
                    DirectoryIndex index.php index.html
                </IfModule>

    备注:连接方式1 更方便在本地使用,2和3一般会使用远程 php 服务器上。


3.3:Nginx与php连接
    要点:
        1:Nginx 默认支持 fastcgi
        2:php编译开启模块:
            --enable-fpm

    连接:
        server {
            listen       80;
            server_name  localhost;
            root /var/www/html;
            index  index.php index.html;
            .......
            # nginx 连接方式
            location ~ \.php$ {
                # root /:可以在这里单独设置php的根,$document_root 变量是上面 root 定义的网站根路径。
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
        }    


四:PHP与MariaDB(mysql)连接:

4.1:使用 MariaDB 编译(相对于mysql安装的目录)
    --with-mysql=/usr/local/mysql
    --with-mysqli=/usr/local/mysql/bin/mysql_config
    --with-pdo-mysql=/usr/local/mysql

4.2:使用 PHP 的 mysqlnd 编译(推荐使用)
    --with-mysql=mysqlnd
    --with-mysqli=mysqlnd
    --with-pdo-mysql=mysqlnd

4.3:php版本区别要点:
    1:php7移除了 mysql 扩展,php7仅能是用 mysqli 和 pdo_mysql
    2:mysqlnd 要求 php版本 >= 5.3
    4:mysqlnd和php内部机制结合更紧密,是优化过的mysql驱动,建议使用。


五:测试

1.1:添加文件与内容
    ~]# vi /var/www/html/index.php
        <?php
        phpinfo();
        ?>



六:php多版本安装注意事项。

6.1:httpd与php
    httpd 模块:可以编译多个版本,但同时只能运行一个,另外一个需要注释。
        LoadModule php7_module        modules/libphp7.so
        #LoadModule php5_module        modules/libphp5.so

    httpd fastcgi:
        在 vhost 虚拟机中指定不同的监听地址。
        例如:
            <VirtualHost *:80>
            DocumentRoot "/web/a"
            ServerName www.a.com
                    <FilesMatch \.php$>
                             SetHandler proxy:fcgi://127.0.0.1:9000
                    </FilesMatch>
                    # 或者
                    ProxyRequests Off
                   ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/var/www/html/$1
            </VirtualHost>

6.2:nginx与php
        指定不同的监听地址
        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
        }



七:推荐博客

6.1:官网安装帮助文档:http://php.net/manual/zh/install.php
6.2:http://cnzhx.net/blog/apache-httpd-mod_proxy_fcgi-php-fpm/

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010861514/article/details/51926575

智能推荐

2023 年度,最受人欢迎的低代码开发平台大盘点_clickpass 流程引擎-程序员宅基地

文章浏览阅读232次。最受人欢迎的低代码开发平台大盘点_clickpass 流程引擎

Intellij IDEA安装配置Spark与运行_ideal中安装scala插件,配置spark-程序员宅基地

文章浏览阅读1.2k次,点赞10次,收藏15次。在com.tipdm.sparkDemo包下新建WordCount类并指定类型为object,编写spark程序实现单词计数器。整个程序会读取指定路径下的文件,计算每个单词的出现次数,并打印结果。这是一个使用Spark进行基本文本分析的常见示例。在Scala中,对象可以包含方法和字段,并且可以作为程序的入口点。这两个类,它们都是Apache Spark的核心组件。在Scala的基础上((在Scala中,这相当于Java中的。对象,它是Spark应用程序的入口点。,它包含了要读取的文件的路径。_ideal中安装scala插件,配置spark

golang通过go-git下载gitlab源码_go git代码 下载-程序员宅基地

文章浏览阅读662次,点赞9次,收藏5次。【代码】golang通过go-git下载gitlab源码。_go git代码 下载

按照珠算口诀进行计算的数字计算机_珠算数字计算机-程序员宅基地

文章浏览阅读4.1k次。按照珠算口诀进行计算的数字计算机按照珠算口诀进行计算的数字计算机是一种按照珠算口诀进行逻辑判断,并安排加法器,乘法器,除法器,减法器的数字计算机。它用LED灯显示计算结果,一个LED灯和算盘上面的一个珠子对应,算盘上出现几个珠子,就会显示LED灯。从键盘输入的计算程序,存储在磁带上面,经过数字运算符号判断电路以后,进入相应的计算电路。例如,输入程序中出现+符号,计算机经过与门判断后进入加法计算电路。例如,输入程序中出现*符号,计算机经过与门判断后进入乘法计算电路。从键盘输入的计算程序,存储在磁带上面,_珠算数字计算机

放弃fastjson,拥抱Jackson_不用fastjson-程序员宅基地

文章浏览阅读402次。文章目录背景常用操作json object操作序列化操作反序列化日期类型反序列化自定义反序列化枚举类型反序列化背景最近由于阿里的fastjson频繁爆出安全漏洞,为了避免后续升级上线的烦恼,决定弃用fastjson,使用Jackson,把现有项目中的fastjson都换成了Jackson,由于很多写法上有些不同,所以在这里把这些改过的东西做一下笔记。常用操作首先引入相关的pom <properties> <jackson.version>2.11.0_不用fastjson

c语言中有传递引用参数,c++之 引用&参数传递-程序员宅基地

文章浏览阅读738次。明天继续总结,太乱了嘿嘿,。。。C++引用与指针的比较引用是C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。intm;int&n = m;n相当于m的别名(绰号),对n的任何操作就是对m的操作。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。l引用的规则:(1)引用被创建的同时必须被初始化(..._c语言中 &引用参数

随便推点

SpringBoot入门(2)_opencv_core.iplimage jar包-程序员宅基地

文章浏览阅读148次。第二节 spring扩展分析 获取上下文方法,三种注入ApplicationContext的方法 自动装配 ApplicationContext 实现接口 ApplicationContextAwareBean的构造参数注入 扩展点1 BeanPostProcessor ---Bean初始化的后置处理,每个Bean初始..._opencv_core.iplimage jar包

SpringBoot中pom.xml配置详解-程序员宅基地

文章浏览阅读298次。pom.xml是Maven项目的核心配置文件,用于管理项目的依赖、插件、构建配置等。在Spring Boot项目中,pom.xml文件也扮演着重要的角色。在pom.xml文件中,可以配置项目的资源文件。在Spring Boot的pom.xml文件中,通常会有一个<resources>标签文件,用于指定资源文件的路径和名称 。基本配置1. project<project>元素..._pom.xml配置spring

【Simulink】飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)_飞轮储能系统风力发电并网功率平滑控制matlab仿真-程序员宅基地

文章浏览阅读571次。该仿真为飞轮储能系统的建模,包括电网侧和电机侧两部分模型,仿真采用永磁同步电机作为飞轮驱动电机,通过矢量控制的方式对其发电和电动的工况进行控制,同时,配合双PWM整流器实现能量在电网侧与电机侧之间不断流动,其原理是利用了电机电感储存能量,再经由PWM整流器进行升压,实现能量回馈。该仿真采用两种模式,有丰富的理论资料,方便学习参考!_飞轮储能系统风力发电并网功率平滑控制matlab仿真

Maven pom文件详解_pom的releases-程序员宅基地

文章浏览阅读175次。xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"> _pom的releases

若依(ruoyi)spring security配置详解_@author ruoyi-程序员宅基地

文章浏览阅读6.1k次。若依(ruoyi)spring security配置详解SecurityConfig/** * spring security配置 * * @author ruoyi *///@EnableGlobalMethodSecurity(prePostEnabled=true)// 开启基于方法的安全认证机制,也就是说在web层的controller启用注解机制的安全确认,而securedEnabled// 确定是否应该启用Spring Security的安全注释。// 返回值: 如果应该启用_@author ruoyi

tensorflow滑动平均模型ExponentialMovingAverage的使用_exponentialmovingaverage在tensflow使用-程序员宅基地

文章浏览阅读1.5w次。  滑动平均模型可以在一定程度上提高最终模型在测试集或实际预测数据的准确性。神经网络中每层的参数矩阵W都建一个对应的影子变shade_w量,一般情况下每一批数据更新一次W,shade_w也会随着更新但更新的幅度小有W。影子变量更新值由下面的公式决定:   shadow_w = decay * shadow_w + (1-decay) * w shadow_w的初始值就是w的初始值,decay..._exponentialmovingaverage在tensflow使用