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/