• php编译安装与配置


    [html] view plain copy
     
    1. php编译安装与配置  
    2. ===========================================  
    3. 官网:http://php.net/  
    4. 官网下载:http://php.net/downloads.php  
    5. ===========================================  
    6.   
    7.   
    8. 一:了解与准备  
    9.   
    10. 1.1:Apache(httpd)  nginx 与 php 连接方式:  
    11.     httpd与php:  
    12.         1:php 作为 httpd 模块  
    13.         2:fastcgi(php-fpm)  
    14.         3:cgi(此处不讲解)  
    15.     nginx与php:  
    16.         1:fastcgi(php-fpm)  
    17.   
    18. 1.2:PHP安装与依赖:  
    19.     ~]# 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  
    20.   
    21. 1.3:备注:  
    22.     1:上面的依赖基本解决所需要的依赖。  
    23.     2:编译安装完成后可以增减所支持的php模块,此处所编译的模块已经非常完备。  
    24.     3:需要编译单个模块,查看php模块编译方式:php模块编译  
    25.     4:下面编译安装的配置选项:  
    26.         --prefix=/usr/local/php7    主程序文件路径  
    27.         --sysconfdir=/etc/php7      配置文件路径  
    28.         --with-config-file-path=/etc/php7       php.ini 文件路径  
    29.         --with-apxs2=/usr/local/httpd/bin/apxs  以 httpd 模块编译时需要指定 httpd 的 apxs 文件路径。  
    30.         其他的配置可以按自己需求指定,这几个选项也可以使用默认配置。  
    31.     5:php7移除了 mysql 扩展,php7仅能是用 mysqli 和 pdo_mysql。php5可以使用。  
    32.         php5编译时加入选项:--with-mysql 。详情查看下面的 PHP与MariaDB(mysql)连接  
    33.     6:此处以 CentOs7 编译 php7 为示例,配合讲解php5安装的要点。  
    34.     7:php.ini 文件是在包目录下的 php.ini-development(开发), php.ini-production(生产)  
    35.         编译完成后选择自己需要的 php.ini 文件 复制到 --with-config-file-path 指定的目录。  
    36.         如果编译时为指定此选项,编译完成配置并启动nginx和php查看 phpinfo() 函数所指定的 php.ini 文件路径:Configuration File (php.ini) Path  
    37.         默认为php目录下的 lib 目录。  
    38.     8:PHP安装与依赖中 psmisc.x86_64 是 killall 命令的包名,以便最小化安装时终止进程。  
    39.   
    40.   
    41. 二:php编译与配置:  
    42.   
    43. 2.1: httpd 模块  
    44.         备注:需要事先存在httpd ,编译指定 apxs 文件位置。此处以--with-apxs2=/usr/local/httpd/bin/apxs 作为演示。  
    45.         php7:  
    46.                 ~]# ./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  
    47.   
    48.         php5.6:(仅增加了选项 --with-mysql=mysqlnd)  
    49.                 ~]# ./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  
    50.   
    51. 2.2:fastcgi php-fpm 模式  
    52.         php7:  
    53.                 ~]# ./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  
    54.   
    55.         php5.6:(仅增加了选项 --with-mysql=mysqlnd)  
    56.                 ~]# ./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  
    57.   
    58. 2.3:php.ini 配置文件(在源码包目录下)  
    59.     ~]# cp php.ini-production /etc/php7/php.ini  
    60.   
    61.   
    62. 2.4:php 作为 httpd 模块  
    63.     不需要修改 php 配置,  
    64.   
    65.   
    66. 2.5:fastcgi php-fpm  
    67.         ~]# cp /etc/php7/php-fpm.conf.default /etc/php7/php-fpm.conf  
    68.         ~]# cp /etc/php7/php-fpm.d/www.conf.default /etc/php7/php-fpm.d/www.conf  
    69.         # 默认即可是本机 127.0.0.1 不必修改。  
    70.         ~]# vi /etc/php7/php-fpm.d/www.conf  
    71.             # 监听地址  
    72.             listen = 127.0.0.1:9000  
    73.             # 允许的客户端  
    74.             listen.allowed_clients = 127.0.0.1  
    75.     备注:php5 需要复制 php-fpm.conf.default 为 php-fpm.conf 即可。查看 php-fpm.conf 监听地址和允许的客户端。  
    76.   
    77.   
    78. 2.6:启动与停止  
    79.     httpd模块:  
    80.         重新加载 httpd 。  
    81.   
    82.     fastcgi:  
    83.         ~]# vi /etc/php7/php-fpm.conf  
    84.         打开注释:(不打开注释仅能使用 killall php-fpm 关闭 php)  
    85.             pid = run/php-fpm.pid  
    86.   
    87.         启动:  
    88.             /usr/local/php7/sbin/php-fpm  
    89.         立刻终止  
    90.             kill -INT `cat /usr/local/php7/var/run/php-fpm.pid`  
    91.             kill -TERM `cat /usr/local/php7/var/run/php-fpm.pid`  
    92.             killall php-fpm  
    93.         平滑终止  
    94.             kill -QUIT `cat /usr/local/php7/var/run/php-fpm.pid`  
    95.         平滑重启  
    96.             kill -USR2 `cat /usr/local/php7/var/run/php-fpm.pid`  
    97.   
    98.   
    99. 2.7:加入环境变量  
    100.     ~]# vi /etc/profile.d/web.sh  
    101.         export PATH=$PATH:/usr/local/php7/sbin:/usr/local/php7/bin  
    102.   
    103. 2.8:CentOS 系统服务(/etc/php7/php-fpm.conf 文件 pid = run/php-fpm.pid 注释需要打开:2.6 )  
    104. CentOS 6:  
    105.     ~]# vi /etc/rc.d/init.d/php-fpm  
    106.     ~]# chmod +x /etc/rc.d/init.d/php-fpm  
    107. --------------------------file start---------------------------------  
    108. #! /bin/sh  
    109. # chkconfig: - 84 16  
    110. # description:  PHP FastCGI Process Manager  
    111.   
    112. # Source function library.  
    113. . /etc/init.d/functions  
    114.   
    115. # Check that networking is up.  
    116. . /etc/sysconfig/network  
    117.   
    118. # Additional environment file  
    119. if [ -f /etc/sysconfig/php-fpm ]; then  
    120.       . /etc/sysconfig/php-fpm  
    121. fi  
    122.   
    123. if [ "$NETWORKING" = "no" ]  
    124. then  
    125.     exit 0  
    126. fi  
    127.   
    128. RETVAL=0  
    129. prog="php-fpm"  
    130. # 可根据版本不同修改 phpfpm pidfile lockfile变量。其他地方不用修改。  
    131. phpfpm="/usr/local/php7/sbin/php-fpm"  
    132. pidfile=${PIDFILE-/usr/local/php7/var/run/php-fpm.pid}  
    133. lockfile=${LOCKFILE-/usr/local/php7/var/run/php-fpm.lock}  
    134.   
    135. start () {  
    136.     echo -n $"Starting $prog: "  
    137.     dir=$(dirname ${pidfile})  
    138.     [ -d $dir ] || mkdir $dir  
    139.     daemon --pidfile ${pidfile} ${phpfpm}  
    140.     RETVAL=$?  
    141.     echo  
    142.     [ $RETVAL -eq 0 ] && touch ${lockfile}  
    143. }  
    144. stop () {  
    145.     echo -n $"Stopping $prog: "  
    146.     killproc -p ${pidfile} php-fpm  
    147.     RETVAL=$?  
    148.     echo  
    149.     if [ $RETVAL -eq 0 ] ; then  
    150.         rm -f ${lockfile} ${pidfile}  
    151.     fi  
    152. }  
    153. restart () {  
    154.         stop  
    155.         start  
    156. }  
    157. reload () {  
    158.     echo -n $"Reloading $prog: "  
    159.     if ! ${phpfpm} --test ; then  
    160.             RETVAL=6  
    161.             echo $"not reloading due to configuration syntax error"  
    162.             failure $"not reloading $prog due to configuration syntax error"  
    163.     else  
    164.         killproc -p ${pidfile} php-fpm -USR2  
    165.         RETVAL=$?  
    166.     fi  
    167.     echo  
    168. }  
    169. # See how we were called.  
    170. case "$1" in  
    171.   start)  
    172.     start  
    173.     ;;  
    174.   stop)  
    175.     stop  
    176.     ;;  
    177.   status)  
    178.     status -p ${pidfile} php-fpm  
    179.     RETVAL=$?  
    180.     ;;  
    181.   restart)  
    182.     restart  
    183.     ;;  
    184.   reload|force-reload)  
    185.     reload  
    186.     ;;  
    187.   configtest)  
    188.     ${phpfpm} --test  
    189.     RETVAL=$?  
    190.     ;;  
    191.   condrestart|try-restart)  
    192.     [ -f ${lockfile} ] && restart || :  
    193.     ;;  
    194.   *)  
    195.     echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}"  
    196.     RETVAL=2  
    197.         ;;  
    198. esac  
    199. exit $RETVAL  
    200. --------------------------file end---------------------------------  
    201.     ~]# service php-fpm {start|stop|status|restart|reload|force-reload|condrestart|try-restart|configtest}  
    202.   
    203. CentOS 7:  
    204.     ~]# vim /usr/lib/systemd/system/php-fpm.service  
    205. --------------------------file start---------------------------------  
    206. [Unit]  
    207. Description=php-fpm  
    208. After=syslog.target network.target  
    209.   
    210. [Service]  
    211. Type=forking  
    212. PIDFile=/usr/local/php7/var/run/php-fpm.pid  
    213. ExecStart=/usr/local/php7/sbin/php-fpm  
    214. ExecReload=/bin/kill -USR2 $MAINPID  
    215. PrivateTmp=true  
    216.   
    217. [Install]  
    218. WantedBy=multi-user.target  
    219. --------------------------file end---------------------------------  
    220.     ~]# systemctl (start | restart | reload | stop | enable | disable | status) php-fpm.service  
    221.   
    222.   
    223. 2.8:系统启动服务  
    224.     CentOS 6:  
    225.         加入 chkconfig 管理:  
    226.             ~]# chkconfig --add php-fpm  
    227.         开机启动:  
    228.             ~]# chkconfig --level 345 php-fpm on  
    229.         开机不启动:  
    230.             ~]# chkconfig php-fpm off  
    231.         查看开机是否启动  
    232.             ~]# chkconfig --list php-fpm  
    233.   
    234.     CentOS 7:  
    235.         开机启动:  
    236.             ~]# systemctl enable php-fpm.service  
    237.         开机不启动:  
    238.             ~]# systemctl disable php-fpm.service  
    239.   
    240.   
    241. 2.9:加入 man 文档  
    242.     CentOS 6:  
    243.         ~]# vim /etc/man.config  
    244.     CentOS 7:  
    245.         ~]# vi /etc/man_db.conf  
    246.   
    247.     写入:  
    248.     MANPATH /usr/local/php7/php/man  
    249.   
    250.     备注:然后就可以使用 man 命令查看  
    251.   
    252.   
    253. 三:httpd  nginx 与 php 连接  
    254.   
    255. 3.1:httpd 模块 php  
    256.         要点:  
    257.             1:httpd开启模块:  
    258.                 LoadModule proxy_module modules/mod_proxy.so  
    259.                 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  
    260.   
    261.             2:php编译指定 httpd apxs 路径(成为 httpd 模块)  
    262.                 --with-apxs2=/usr/local/httpd24/bin/apxs  
    263.   
    264.         连接:  
    265.             ~]# vi /etc/httpd/httpd.conf  
    266.             1:添加:(编译时这个默认已经添加)  
    267.                 LoadModule php7_module        modules/libphp7.so  
    268.                 #LoadModule php5_module        modules/libphp5.so  
    269.             2:添加 index.php:  
    270.                 <IfModule dir_module>  
    271.                     DirectoryIndex index.php index.html  
    272.                 </IfModule>  
    273.             3:文件最后添加:  
    274.                 <FilesMatch .php$>  
    275.                     SetHandler application/x-httpd-php  
    276.                 </FilesMatch>  
    277.         备注:vhost 也可以应用  
    278.   
    279.   
    280. 3.2:httpd(fastcgi)与 php-fpm  
    281.         要点:  
    282.             1:httpd开启模块:  
    283.                 LoadModule proxy_module modules/mod_proxy.so  
    284.                 LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so  
    285.   
    286.             2:php编译开启模块:  
    287.                 --enable-fpm  
    288.   
    289.         连接方式1:  
    290.             ~]# vi /etc/httpd/httpd.conf  
    291.                 最后添加:  
    292.                   # On:正向代理(默认)  Off:反向代理(此处建议使用)  
    293.                   ProxyRequests Off  
    294.                 <FilesMatch .php$>  
    295.                          SetHandler proxy:fcgi://127.0.0.1:9000  
    296.                 </FilesMatch>  
    297.   
    298.         连接方式2:  
    299.             ~]# vi /etc/httpd/httpd.conf  
    300.                 最后添加:  
    301.                   # On:正向代理(默认)  Off:反向代理(此处建议使用)  
    302.                   ProxyRequests Off  
    303.                 <LocationMatch ^(.*.php)$>   
    304.                     ProxyPass fcgi://127.0.0.1:9000/var/www/html/  
    305.                 </LocationMatch>  
    306.   
    307.         连接方式3:类型2的改变  
    308.             ~]# vi /etc/httpd/httpd.conf  
    309.                 最后添加:  
    310.                   # On:正向代理(默认)  Off:反向代理(此处建议使用)  
    311.                   ProxyRequests Off  
    312.                   ProxyPassMatch ^/(.*.php)$  fcgi://127.0.0.1:9000/var/www/html/$1  
    313.   
    314.   
    315.          连接方式设置完后再添加 index.php:  
    316.                 <IfModule dir_module>  
    317.                     DirectoryIndex index.php index.html  
    318.                 </IfModule>  
    319.   
    320.     备注:连接方式1 更方便在本地使用,2和3一般会使用远程 php 服务器上。  
    321.   
    322.   
    323. 3.3:Nginx与php连接  
    324.     要点:  
    325.         1:Nginx 默认支持 fastcgi  
    326.         2:php编译开启模块:  
    327.             --enable-fpm  
    328.   
    329.     连接:  
    330.         server {  
    331.             listen       80;  
    332.             server_name  localhost;  
    333.             root /var/www/html;  
    334.             index  index.php index.html;  
    335.             .......  
    336.             # nginx 连接方式  
    337.             location ~ .php$ {  
    338.                 # root /:可以在这里单独设置php的根,$document_root 变量是上面 root 定义的网站根路径。  
    339.                 fastcgi_pass   127.0.0.1:9000;  
    340.                 fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  
    341.                 include        fastcgi_params;  
    342.             }  
    343.         }      
    344.   
    345.   
    346. 四:PHP与MariaDB(mysql)连接:  
    347.   
    348. 4.1:使用 MariaDB 编译(相对于mysql安装的目录)  
    349.     --with-mysql=/usr/local/mysql  
    350.     --with-mysqli=/usr/local/mysql/bin/mysql_config  
    351.     --with-pdo-mysql=/usr/local/mysql  
    352.   
    353. 4.2:使用 PHP 的 mysqlnd 编译(推荐使用)  
    354.     --with-mysql=mysqlnd  
    355.     --with-mysqli=mysqlnd  
    356.     --with-pdo-mysql=mysqlnd  
    357.   
    358. 4.3:php版本区别要点:  
    359.     1:php7移除了 mysql 扩展,php7仅能是用 mysqli 和 pdo_mysql  
    360.     2:mysqlnd 要求 php版本 >= 5.3  
    361.     4:mysqlnd和php内部机制结合更紧密,是优化过的mysql驱动,建议使用。  
    362.   
    363.   
    364. 五:测试  
    365.   
    366. 1.1:添加文件与内容  
    367.     ~]# vi /var/www/html/index.php  
    368.         <?php  
    369.         phpinfo();  
    370.         ?>  
    371.   
    372.   
    373.   
    374. 六:php多版本安装注意事项。  
    375.   
    376. 6.1:httpd与php  
    377.     httpd 模块:可以编译多个版本,但同时只能运行一个,另外一个需要注释。  
    378.         LoadModule php7_module        modules/libphp7.so  
    379.         #LoadModule php5_module        modules/libphp5.so  
    380.   
    381.     httpd fastcgi:  
    382.         在 vhost 虚拟机中指定不同的监听地址。  
    383.         例如:  
    384.             <VirtualHost *:80>  
    385.             DocumentRoot "/web/a"  
    386.             ServerName www.a.com  
    387.                     <FilesMatch .php$>  
    388.                              SetHandler proxy:fcgi://127.0.0.1:9000  
    389.                     </FilesMatch>  
    390.                     # 或者  
    391.                     ProxyRequests Off  
    392.                    ProxyPassMatch ^/(.*.php)$  fcgi://127.0.0.1:9000/var/www/html/$1  
    393.             </VirtualHost>  
    394.   
    395. 6.2:nginx与php  
    396.         指定不同的监听地址  
    397.         location ~ .php$ {  
    398.             fastcgi_pass   127.0.0.1:9000;  
    399.         }  
    400.   
    401.   
    402.   
    403. 七:推荐博客  
    404.   
    405. 6.1:官网安装帮助文档:http://php.net/manual/zh/install.php  
    406. 6.2:http://cnzhx.net/blog/apache-httpd-mod_proxy_fcgi-php-fpm/  
  • 相关阅读:
    站立会议第二天
    站立会议第一天
    Scrum_Sprint
    电梯演讲之加减乘除
    The group WHATEVER is formed today
    awk简介(使用方法)
    关于Java进程流程简介
    Bootstrap_导航
    Bootstrap_按钮工具栏
    Bootstrap_下拉菜单
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8324345.html
Copyright © 2020-2023  润新知