一、下载
到官网下就好http://php.net/downloads.php
二、编译安装
# tar zxf php-5.6.0.tar.gz
# ./configure --prefix=/usr/local/lnmp/php \ ##安装路径
--with-config-file-path=/usr/local/lnmp/php/etc \ ##配置文件目录
--with-mysql --with-mysqli --with-pdo-mysql --enable-mysqlnd \
--with-openssl \
--with-snmp \
--with-gd \
--with-zlib \
--with-curl \
--with-libxml-dir \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-pear \
--with-gettext \
--with-gmp \
--enable-inline-optimization \
--enable-soap \
--enable-ftp \
--enable-sockets \
--enable-mbstring \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-mcrypt \
--with-mhash
mysql,mysqli,pdo,mysqlnd四者之间的关系:
MYSQL: 也叫 Original MySQL,PHP4版本的MYSQL扩展,从PHP5起已经被废弃,并别从PHP7开始已经被移除。
MYSQLI :叫做 “MySQL增强扩展”。
MYSQLND: MYSQL NATIVE DIRVER 叫做MYSQL “官方驱动”或者更加直接点的叫做“原生驱动”
PDO :PHP Data Objects PHP数据对象,是PHP应用中的一个数据库抽象层规范。
从应用的层面上看,我们通过PHP 的MYSQL或者MYSQLi扩展提供的API去操作数据库。
从底层来看,MYSQLND提供了底层和数据库交互的支持(可以简单理解为和MySQL server进行网络协议交互)。
而PDO,则提供了一个统一的API接口,使得你的PHP应用不去关心具体要连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器。比如MYSQL,SQLITE任何数据库都行。
即从大部分功能上看,PDO提供的API接口和MYSQLI提供的接口对于普通的增删改查效果是一致的。
之前,MySQL数据库扩展mysql,mysqli,PDO MYSQL都是通过libmysqlclient实现与MySQL Server的通信。引入mysqlnd,这三个扩展都可以通过mysqlnd实现与MySQL Server的通信。
出错:
configure: error: xml2-config not found. Please check your libxml2 installation.
# yum install libxml2-devel
出错:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
# yum install libcurl-devel
出错:
configure: error: jpeglib.h not found.
# yum install gd-devel-2.0.35-11.el6.x86_64.rpm
要是没有包就去下载
出错:
configure: error: Unable to locate gmp.h
# yum provides */gmp.h
# yum install /usr/include/gmp.h
出错:
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
# yum install libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm -y
出错:
configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation.
# yum install net-snmp-devel
编译完成,开始安装
# make
# make install
三、安装后配置
/usr/local/lnmp/php/etc
# cp php-fpm.conf.default php-fpm.conf ##复制配置文件
/software/php-5.6.20
# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
php.ini用来控制php的某些功能 某些功能比如:错误提示,短标签,上传文件最大值,扩展等等可以通过php.ini文件设置/usr/local/lnmp/php/etc
# vim php.ini
date.timezone = Asia/Shanghai ##设置时区
pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock ##设置默认套接字
mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
mysqli.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
# vim php-fpm.conf ##PHP-FPM是一个PHPFastCGI管理器,是只用于PHP的
pid = run/php-fpm.pid
/software/php-5.6.20/sapi/fpm
# cp init.d.php-fpm /etc/init.d/php-fpm ##启动脚本
# chmod +x /etc/init.d/php-fpm
# /etc/init.d/php-fpm start
四、Nginx里的php
Nginx里对php的设置:
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
location / {
root html;
index index.php index.html index.htm;
}
# vim ../html/index.php
五、Discuz! X 社区软件
下载安装包,并解压,解压后有一个upload目录放到
# mv upload/ /usr/local/lnmp/nginx/html/bbs
/usr/local/lnmp/nginx/html/bbs
# chmod 777 -R config/ data uc_client/ uc_server/
/usr/local/lnmp/mysql
# chmod 777 data
/usr/local/lnmp/mysql/data
# chown mysql.mysql mysql_safe.pid
问题:什么时候会用到后端的PHP应用服务器呢?
1.当前段的请求数没有那么大
后端只需要一个app server就够了
2.当前端的请求数逐渐增大,到一定程度
此时后端一个app server就不够了,来分担压力,
3.多个app server,就出现了一个问题,数据如何同步
此时,就另外开一台数据库服务器,所有的app server都与数据库进行数据交换
4.这样一来一个数据库也不够了,读写分离
5.如果我们app server每次都要到数据库去找,就会很费时
此时,我们在app server与数据库服务器之间配置一台memcache,他只负责存储数据,其他不管
这样,app server发来一个请求,会先到memcache找,如果找不到,在去数据库找,数据库返回给app server,由app server决定是否要将结果放到memcache,
6.假设只有一台app server时
每个连接对应一个fastCGI进程,php程序编译出来的opcode无法给其他处理请求的进程分享,因此需要有一个缓存xcache,这个缓存的作用就是将php程序编译出来的pocode共享给全部进程,一个程序在编译完执行opcode时才需要与后端数据库交互