php编译安装与配置

转载 2016年08月29日 21:29:48
  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. 说明:如果报No package libmcrypt available. No package libmcrypt-devel available 请参考以下链接:

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

php源码编译安装

PHP安装 要用swoole,首先需要有PHP环境。由于swoole的某些特性,最好是能够从源码编译安装PHP,这样在使用过程中可以避免很多不必要的错误。PHP下载地址:http://php.net/...
  • YHL27
  • YHL27
  • 2014年12月30日 23:43
  • 17769

Ubuntu 安装PHP找不着BZip2

错误如下:checking for BZip2 in default path... not found configure: error: Please reinstall the BZip2 di...

php bz2扩展安装

添加bz2扩展,编译报错: configure: error: Please reinstall the BZip2 distribution 解决方案: yum install -y ...

手动编译php

总是用套件搭建环境导致对环境的内在关联关系不是很明白,因为套件吧一切都帮你搞定了。 最近手动编译了nginx发现其实光编译还不够还要知道相关的东西才能够保证系统正常运转。好了不说废话了开始手动编译ph...
  • gxrj11
  • gxrj11
  • 2016年04月27日 17:26
  • 484

Linux 下编译安装 PHP 5.6

系统环境: CentOS 6.5 / 7.0 x86_64Fedora 20 x86_64 下载 PHP 源码包 # wget http://cn2.php.net/distributions/p...
  • warthur
  • warthur
  • 2016年04月17日 19:57
  • 11630

php安装完成以后要复制php.ini文件

直接#find   / -name "php.ini"找不到,是因为安装php的时候没有复制配置文件php版本变化以后ini文件名有变php.ini-production对应于php.ini-reco...
  • 21aspnet
  • 21aspnet
  • 2011年11月22日 17:38
  • 15157

不重新编译PHP为PHP安装zlib扩展-学习收集

一台服务器,编译PHP时未设置参数,导致缺少zlib扩展,无法执行解压缩,错误信息是:“Fatal error: Call to undefined function gzopen”。 首先找到...

PHP虽然不要编译,但是它真的写完就能运行吗?

PHP虽然不要编译,但是它真的写完就能运行吗?1.PHP的一大特性是:脚本语言、不要编译 但是真的写完就可以运行?然而并不是。 PHP代码想要运行必须有个”母体”——就是我们编译好的那个”PHP可...

php编译安装与配置

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

如何编译PHP源代码(ZEND)

如何编译PHP源代码? 2002-05-14· · ··dev-club   综述:我们将要介绍Zend公司的最新工具Zend Encoder,利用这个工具,我们就可以实现编译PHP,从而达到保护PH...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php编译安装与配置
举报原因:
原因补充:

(最多只允许输入30个字)