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

最新文章

  1. 总结-Hibernate
  2. 关于IOS的证书、App ID、设备、Provisioning Profile详述
  3. UVa 10129单词(欧拉回路)
  4. UIButton的常用属性
  5. C#动态执行字符串(动态创建代码)
  6. 【M22】考虑以操作符复合形式(op=)取代其独身形式(op)
  7. linux exec函数家族
  8. poj 2584 T-Shirt Gumbo 网络流
  9. 1.1 mysql安装
  10. spark连接mongodb
  11. lvs+keepalive构建高可用集群
  12. github笔记
  13. 150. Evaluate Reverse Polish Notation逆波兰表达式
  14. InnoDB体系架构(二)内存
  15. Smack类库详细介绍
  16. centos7防火墙以设置以及关闭selinux
  17. Struts2 Spring Hibernate 框架整合 Annotation MavenProject
  18. Android之在应用程序内部关注某人的微信
  19. Linux常用命令【总结】
  20. android驱动学习---led实验

热门文章

  1. SPOJ705 SUBST1 - New Distinct Substrings(后缀数组)
  2. Chrome插件开发教程收集
  3. PHP switch的“高级”用法详解
  4. java中终止线程的三种方式
  5. NFS 服务配置篇
  6. django发送邮箱
  7. node-表单验证
  8. Win7如何安装IIS来浏览ASP网站
  9. xtrabackup详解
  10. 第14章5节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer执行状态