前言:上一篇博文,说到了URL、http的协议、事务以及私有https的实现。此次

一、 概念:

  LAMP:

  a:apache

  m:mariadb,mysql

  p:php,perl,python

二、apache & php

众所周知:httpd通常而言有两种资源类型:分为静态资源动态资源,前者指的是客户端从服务器端获取资源的表现形式原文件相同,后者指的是需要服务器执行之后,其结果放回客户端,换句话说客户端服务器端获取资源的表现形式和原文件不尽相同

静态服务器的响应模式便是最为普通、最为古老的响应方式,即客户端发起tcp建立虚链路、httpd接受请求并处理请求、获取资源、将资源封装成http报文发还给客户端、断开虚链路。从头至尾,httpd除了获取资源外没有做出其他额外多余的工作,也就是上文所说的资源表现形式不变,相反,动态资源则复杂得多。

  client  -->  tcp  -->  httpd --> client

  

动态服务器的响应模式较静态服务器而言多了数个步骤,当httpd接受请求之后,发觉这是动态资源后,并不会直接处理请求而是将其交给应用应用程序的执行环境处理请求,再由应用应用程序执行环境从服务器本地获取资源并执行,之后将其结果返回给服务器,服务器再将其封装为响应报文,发还给客户端,最后再断开虚链路。过程比静态服务器多了数个步骤,这也就是为什么动态资源运行之所以缓慢的原因。

   client  --> tcp  --> httpd --> php  --->httpd --> client

  

没错,聪明如你。从上图之中能够清楚得发觉,httpd与客户端使用http协议进行交互,httpd获取资源只需要发起系统调用,而httpd与后端php的交互确实未明。CGI协议便是httpd与后端进行交互的协议,CGI协议可视为阉割版的http协议,若将httpd视为网关,则php为服务器(具体这里便不进行讨论)。服务器端识别资源之后,通过CGI协议送给后端应用程序执行环境,后端接收之后从服务器端本地加载程序并运行。整个过程httpd属于掮客地位,一手托两家,最根本原因便是客户端本省并不能直接理解CGI协议,倘若能够直接理解CGI协议,就无需httpd,能够直接与后端通信。

httpd本身能够与后端进行交互的模块就叫CGI(httpd -M | grep cgi)

当然,只要后端能够通过CGI协议与httpd通信,后端程序并不需要理解URL,哪怕是bash解释器,只要是能够理解CGI,httpd也能狗通过调动bash解释器作为子进程来处理动态资源。不过,在服务器高并发情况下,这种额外运行子进程的方式会给服务器本身带来特别大的开销(这种方式由服务器本身来维护动态请求)。

 此外,还有一种特殊的cgi,即fastcgi,它能够与前端httpd进行分离,各属于不同的服务器,之中再通过套接字进行通信,如此能够很有效的降低服务器开销。

 

三、MySQL

接下来便是MySQL。

程序由指令+数据组成,通常而言个人计算机所存储的数据皆在文本文件中,运行程序只需从文本文件读取数据随后运行便可,但这对服务器显得颇有难度。设想一下,某台服务器上存储着10G的数据表,现今运行程序需要表中的某些数据,将得10G的表全部加载至内存之中,按表逐字查询直到找到所需数据,取出需求的数据后再将其关闭,不一会又需要数据,又需重新加载10G的表,再次消耗10G的内存。

对个人终端而言一次加载10G的文件不过是停滞数秒乃至数十秒的时间,但对于线上服务器这一代毋容置疑是致命的,每次加载一次数据就得消耗10G的内存那还了得!

显然对于处理较大数据时,并不能按传统的文件查找形式,只因这种方式既消耗资源又不方便管理。

数据库管理系统便是既方便管理查找速度又快的方式。

不过,数据库管理系统多种多样,这里只谈论关系型数据管理系统。

简单而言,关系型数据库管理系统,能够将其有限的一个字段或几个字段提取出来,另存为一个新的数据集,且新存的数据集中每个用户都有一个指针,指针指向原始数据集中所存储文件的位置(数据块)。每次查找都只查询另存的新数据集,如此便轻量得多。

当然,若是抽取一次的数据不够小,那便继续抽取,直至足够小为止。

那么,真正的lamp架构应该为下图:

 

当然,应用程序与MySQL之间依旧通过协议进行交互,客户端能够直接通过应用程序直接连接Mysql进行互动。然而,在lamp架构中与MySQL进行交互的是,或php,或perl,或python,期间包涵无数代码,代码并不能直接理解协议,没错,机智的你已经发觉那就是通用库(库中的某段代码能够将请求封装为MySQL报文),只要是能够让代码调用库也就能够与MySQL进行互动了,现在,只缺一种能够催动通用库与MySQL进行通信的驱动。php程序员为php专门写了能够与MySQL通信的驱动——php-mysql

三、小结

综上所述,一次完整的动态请求(lamp):客户端请求动态资源;httpd接受请求;将请求交由PHP处理;PHP从本地加载程序并运行;假设程序中有涉及用户信息的条件,则PHP发往MySQL;MySQL查询语句,将结果发给PHP,PHP可能与MySQL反复进行交互直至PHP不再需求数据为止;PHP将程序运行结果发还给httpd;httpd响应用户请求。

请求流程:client -->(http)-->httpd-->(cgi)-->application server(program file)-->(mysql)-->mariadb

一次动态完整请求如此复杂,这也就是为什么动态网站响应远远不及静态网站的理由。

直接安装:yum -y install apache php php-mysql mariadb-server ,之后直接启动即可。

安装完成之后使用 rpm -ql php 查看php的安装情况,会发现安装了两种方式,一为普通的配置文件,/etc/httpd/conf.d/php.conf;二为模块目录下/etc/httpd/conf.module.d/10-php.conf,/user/lib64/httpd/modules/libphp5.so。其实httpd有三种结合方式

httpd+php的三种模式:

  modules:

    httpd prefork:libphp5.so

    httpd event or worker:libphp-zts.so

  cgi

   fastcgi

 vim /www/htdocs/index.php   简单输出php页面

  <?php

phpinfo();

?>

测试php是否连接至mysql:

  <?php

$link=mysql_connect('127.0.0.1','mysql',');

if($link)

      echo "OK";

else

echo "Failure";

mysql_close();

?>

LAMP基础的更多相关文章

  1. 再不写,我怕就再也不写了-LAMP基础

    hi 经历了4天大餐的洗礼,整个人都思密达了...昨天的懒,是没有原因的懒,总之就是该提笔了亲 1.Ubuntu下的LAMP配置 -----Ubuntu基础知识----- ----管理员权限 出于安全 ...

  2. httpd-2.4基本使用及lamp基础(01)

    Centos 6 默认安装http版本为2.2,如果想安装2.4版本则需要升级apr centos6默认:apr-1.3.9,apr-util-1.3.9 编译安装步骤: 1.4+版的apr和apr- ...

  3. Linux LAMP架构搭建

    一.部署LAMP基本架构 1.L(linux)A(apache)M(mysql)P(php) 2.稳定版本(mysql5.1,php5.3,apache2.2) 3.安装顺序,mysql-->a ...

  4. CentOS7.X 搭建LAMP

    第一部分搭建LAMP基础环境 1.检查CentOS是否为7.x版本 2.安装LAMP中的apache,采用yum源方法安装 yum  install httpd httpd-devel       A ...

  5. 二、编译安装LAMP之httpd-2.4.4

    回顾 PHP:脚本编程语言,php解释器 Webapp:面向对象的特性 Zend: 第一段:词法分析.句法分析.编译为Opcode: opcode放置于内存中 第二段:执行opcode: opcode ...

  6. subversion(SVN)安装配置

    简介subversion(简称svn)是近年来崛起的版本管理软件系统,是cvs的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件.Subversion是一个版本控制系统,相对于的RCS. ...

  7. centos 6.5 中部署开源的Lepus(天兔)监控

    这俩天一直在搞mysql数据库和centos.昨天成功的部署完mysql的主从库配置后,自己想了想是否需要个数据库监控,和执行情况的监控软件,于是就去百度上搜了一下,结果就搜到了今天的‘主角’ Lep ...

  8. Linux系统入门学习:在CentOS上安装phpMyAdmin

    问题:我正在CentOS上运行一个MySQL/MariaDB服务,并且我想要通过网络接口来用phpMyAdmin来管理数据库.在CentOS上安装phpMyAdmin的最佳方法是什么? phpMyAd ...

  9. Lepus监控之安装部署

    PHP和Python都是跨平台的语言,所以理论上系统应该可以支持在不同的平台上运行.但是由于时间和精力以及资源有限,目前天兔系统只测试完善了Centos/RedHat系统的支持.我们目前提供的技术支持 ...

随机推荐

  1. Entity Framework——记录执行的命令信息

    有两种方法可以记录执行的SQl语句: 使用DbContext.Database.Log属性 实现IDbCommandInterceptor接口 一 使用DbContext.Database.Log属性 ...

  2. MYSQL索引的类型和索引的方式

    索引的类型: normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique full textl: 表示 全文搜索的索 ...

  3. Smarty3.1.3安装使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Verdana } span.s1 { } Smarty简介 Smarty是一个PHP的模板引 ...

  4. 1.12 dict 字典表

    dict 字典表属于映射分类 dict的声明 >>> #dict类型 是 {}中包含若干个键值对 >>> d = dict() >>> d = { ...

  5. python如何使用pymysql模块

    Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而M ...

  6. java使用poi将html导出word,默认打开页面视图

    <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:o ...

  7. C语言结构体定义的几种方法

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  8. webpack打包速度和性能再次优化

    一. 改单dll为双dll 因为上图原因,使用CommonsChunkPlugin时,导致其打包出来的vendors.js内的模块ID会因为其他文件引用模块数量的变化而变化. 所以现利用DllPlug ...

  9. 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)

    <差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...

  10. IO多路复用,同步,异步,阻塞和非阻塞 区别

    一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是 ...