lnmp的搭建——PHP

一、下载

到官网下就好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应用服务器呢?

    若客户单请求的是一个动态网页,请求进来之后,Nginx分析报文,如果发现自己处理不了,就转交给后端,此时Nginx服务器会在内存开辟一段空间来保存与客户端http连接的信息,然后等待后端的fastCGI服务器,后端处理之后把数发给Nginx,处理一点发一点,此时若Nginx直接将结果发给客户端,客户端理解不了fastCGI报文,所以需要Nginx在本地开辟内存来暂存后端发来的数据,当后端发完之后, Nginx开始构建客户端可以理解的http报文。
    
    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时才需要与后端数据库交互
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值