php編譯安裝與配置

php編譯安裝與配置php

===========================================html

官網:http://php.net/mysql

官網下載:http://php.net/downloads.phpnginx

===========================================c++



一:瞭解與準備web


1.1:Apache(httpd)  nginx 與 php 鏈接方式:sql

    httpd與php:apache

        1:php 做爲 httpd 模塊vim

        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


1.3:備註:

    1:上面的依賴基本解決所須要的依賴。

    2:編譯安裝完成後能夠增減所支持的php模塊,此處所編譯的模塊已經很是完備。

    3:須要編譯單個模塊,查看php模塊編譯方式:php模塊編譯

    4:下面編譯安裝的配置選項:

        --prefix=/usr/local/php7    主程序文件路徑

        --sysconfdir=/etc/php7      配置文件路徑

        --with-config-file-path=/etc/php7       php.ini 文件路徑

        --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 --sysconfdir=/etc/php7 --with-config-file-path=/etc/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-gd-native-ttf --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 --sysconfdir=/etc/php5 --with-config-file-path=/etc/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-gd-native-ttf --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 --sysconfdir=/etc/php7 --with-config-file-path=/etc/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-gd-native-ttf --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 --sysconfdir=/etc/php5 --with-config-file-path=/etc/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-gd-native-ttf --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 /etc/php7/php.ini



2.4:php 做爲 httpd 模塊

    不須要修改 php 配置,



2.5:fastcgi php-fpm

        ~]# cp /etc/php7/php-fpm.conf.default /etc/php7/php-fpm.conf

        ~]# cp /etc/php7/php-fpm.d/www.conf.default /etc/php7/php-fpm.d/www.conf

        # 默認便可是本機 127.0.0.1 沒必要修改。

        ~]# vi /etc/php7/php-fpm.d/www.conf

            # 監聽地址

            listen = 127.0.0.1:9000

            # 容許的客戶端

            listen.allowed_clients = 127.0.0.1

    備註:php5 須要複製 php-fpm.conf.default 爲 php-fpm.conf 便可。查看 php-fpm.conf 監聽地址和容許的客戶端。



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:加入環境變量

    ~]# vi /etc/profile.d/web.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

    CentOS 7:

        ~]# vi /etc/man_db.conf


    寫入:

    MANPATH /usr/local/php7/php/man


    備註:而後就可使用 man 命令查看



三: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/

相關文章
相關標籤/搜索