php编译安装与配置
- php编译安装与配置
- ===========================================
- 官网:http://php.net/
- 官网下载:http://php.net/downloads.php
- ===========================================
- 一:了解与准备
- 1.1:Apache(httpd) nginx 与 php 连接方式:
- httpd与php:
- 1:php 作为 httpd 模块
- 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/
php编译安装与配置的更多相关文章
- libCURL开源库在VS2010环境下编译安装,配置详解
libCURL开源库在VS2010环境下编译安装,配置详解 转自:http://my.oschina.net/u/1420791/blog/198247 http://blog.csdn.net/su ...
- CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动
CentOS6.7下使用非root用户(普通用户)编译安装与配置mysql数据库并使用shell脚本定时任务方式实现mysql数据库服务随机自动启动1.关于mysql?MySQL是一个关系型数据库管理 ...
- CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境
CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...
- 【MySQL】源码编译安装和配置MySql 5.5.32(单实例)
[需求描述] 在CentOS环境中,通过编译源码的方式,安装并且配置“单实例”的MySQL5.5.32数据库. MySQL的安装目录为:/application/mysql-5.5.32 MySQL数 ...
- Hadoop学习笔记(一)——编译安装和配置
近期工作调动.打算补一下大数据处理的知识.可能会陆续涉及hadoop.mongodb.ddbs等. 首先Apache提供二进制的Hadoop版本号是32位的.在启动时总是有警告,所以想自己编译一遍.部 ...
- OpenLDAP编译安装及配置
原文发表于cu:2016-06-20 参考文档: 原理:http://seanlook.com/2015/01/15/openldap_introduction/ 官方文档: http://www.o ...
- CentOS 7下OpenLDAP编译安装及配置
一.环境 Server:基于CentOS-7-x86_64-1511 Server IP: 172.18.12.203 二.软件获取 OpenLDAP OpenLDAP官网下载地址:http://ww ...
- Linux编译安装与配置-MySQL(5.5,5.6)版本系(笔记)
MySQL 5.5(5.6)后版本,需要使用cmake(Cross make , https://cmake.org/ )编译 我的环境如下: VMWare虚拟机,CentOS 5.5 x86_64( ...
- freeradius编译安装+mysql配置
参考文档: freeradius 官网的wikihttp://wiki.freeradius.org/Home ubuntu freeradius搭建教程 http://yustanto.com/fr ...
随机推荐
- 摘录 | WAREZ无形帝国
开始 这会儿夜深了,他们昏昏睡去.随便哪栋建筑的某一个黑洞洞的窗口,你冷眼望去,没准就能看到一台白色的电脑,静静地卧在主人的书桌上.如果那主人睡得足够深,你就打开他的抽屉,你看到了什么?哦,我不是指他 ...
- iOS开发 Swift开发数独游戏(三) 选关界面
一.选关界面涉及到的功能点 1)需要UITableView以及相应数据代理.协议的实现 2)读取plist文件并转化成模型 3)在单元格点击后进入数独游戏,涉及到把数据经segue在UIViewCon ...
- 【Linux】linux下查看目录所在分区
命令如下: df -h 目录名 具体使用例子如下:查看/home/sxd/文档处于哪个分区 ------------------------------------------------------ ...
- mysql修改表字段属性类型
例如: 修改表expert_info中的字段birth,允许其为空 >alter table expert_info change birth birth varchar(20) null; 例 ...
- iOS:UICollectionView纯自定义的布局:瀑布流布局
创建瀑布流有三种方式: 第一种方式:在一个ScrollView里面放入三个单元格高度一样的tableView,禁止tableView滚动,只需让tableView随着ScrollView滚动即可. ...
- WEB服务器、应用程序服务器、HTTP服务器区别 【转】
WEB服务器.应用程序服务器.HTTP服务器有何区别?IIS.Apache.Tomcat.Weblogic.WebSphere都各属于哪种服务器,这些问题困惑了很久,今天终于梳理清楚了: Web服务器 ...
- 为什么重写equals方法时,要求必须重写hashCode方法?
1 equals方法 Object类中默认的实现方式是 : return this == obj .那就是说,只有this 和 obj引用同一个对象,才会返回true. 而我们往往需要用equ ...
- ASP.NET MVC学习---(三)EF简单增删改查
那么现在我们已经大概从本质上了解了ef 巴拉巴拉说了一大堆之后 总算要进入ef的正题了 总在口头说也太不行了是吧~ 没错,现在要用ef进行一些实际的操作 做什么呢? 就做一个入门级的增删改查操作吧 废 ...
- 你今天Restful了吗?
大家都宣称自己已经满足REST架构的风格, 那到底需要怎么去评价是否符合REST架构, 至少得有以下几个特征. REST 的约束包括: 无状态.在不同的客户端请求之间,服务器并不保存客户端相关的上下文 ...
- 6. datasource - mysql【从零开始学Spring Boot】
在任何一个平台都逃离不了数据库的操作,那么在spring boot中怎么接入数据库呢? 很简单,我们需要在application.properties进行配置一下,application.proper ...