前言:上一篇博文,说到了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. ubuntu下boost编译安装

    ubuntu下boost编译安装 boost 安装 1.依赖安装 apt-get install mpi-default-dev libicu-dev python-dev python3-dev l ...

  2. rxjs-流式编程

    前言 第一次接触rxjs也是因为angular2应用,内置了rxjs的依赖,了解之后发现它的强大,是一个可以代替promise的框架,但是只处理promise的东西有点拿尚方宝剑砍蚊子的意思. 如果我 ...

  3. Yii2中后台用前台的代码设置验证码显示不出来?

    我说的是直接修改advanced模板.细心人会发现模板里在contact里有,登录也想要就仿照contact中的做法.前台好了,后台登录也要验证码,就把前台代码拿过来,可惜前后台的SiteContro ...

  4. LeetCode第二天&第三天

    leetcode 第二天 2017年12月27日 4.(118)Pascal's Triangle JAVA class Solution { public List<List<Integ ...

  5. acdrem1083 人民城管爱人民 DP

    思路:d(i, 0)表示从节点i到达大运村的最短路径,d(i, 1)表示从节点i到达大运村的次短路径. 1.最短路:当做DAG处理即可. 2.次短路:假设当前在u点处,下一个节点是v.v到终点的最短路 ...

  6. @EnableAsync @Asnc 以及4种拒绝策略

    根据不同的场景,可以选择不同的拒绝策略,如果任务非常重要,线程池队列满了,可以交由调用者线程同步处理. 如果是一些不太重要日志,可以直接丢弃掉. 如果一些可以丢弃,但是又需要知道被丢弃了,可以使用Th ...

  7. openstack-ocata-计算服务4

    一. 计算服务概览 使用OpenStack计算服务来托管和管理云计算系统.OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现. OpenStack计算组件 ...

  8. 关于Maven的web项目的创建

    网上关于Maven的web项目创建多种多样,先本人在研究Maven之余,创建一套自己试过并有效的创建步骤. 1.点击右键>选择Maven Project,如下图所示: 2.点击创建,如下图所示: ...

  9. 1.1 PCI总线的组成结构

    如上文所述,PCI总线作为处理器系统的局部总线,是处理器系统的一个组成部件,讲述PCI总线的组成结构不能离开处理器系统这个大环境.在一个处理器系统中,与PCI总线相关的模块如图1?1所示. 如图1?1 ...

  10. 2.5 非透明PCI桥

    PCI桥规范定义了透明桥的实现规则,本篇在第2.3.1节中详细介绍了这种桥片.通过透明桥,处理器系统可以以HOST主桥为根节点,建立一颗PCI总线树,在这个树上的PCI设备共享同一个PCI总线域上的地 ...