LAMP基础
前言:上一篇博文,说到了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基础的更多相关文章
- 再不写,我怕就再也不写了-LAMP基础
hi 经历了4天大餐的洗礼,整个人都思密达了...昨天的懒,是没有原因的懒,总之就是该提笔了亲 1.Ubuntu下的LAMP配置 -----Ubuntu基础知识----- ----管理员权限 出于安全 ...
- 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- ...
- Linux LAMP架构搭建
一.部署LAMP基本架构 1.L(linux)A(apache)M(mysql)P(php) 2.稳定版本(mysql5.1,php5.3,apache2.2) 3.安装顺序,mysql-->a ...
- CentOS7.X 搭建LAMP
第一部分搭建LAMP基础环境 1.检查CentOS是否为7.x版本 2.安装LAMP中的apache,采用yum源方法安装 yum install httpd httpd-devel A ...
- 二、编译安装LAMP之httpd-2.4.4
回顾 PHP:脚本编程语言,php解释器 Webapp:面向对象的特性 Zend: 第一段:词法分析.句法分析.编译为Opcode: opcode放置于内存中 第二段:执行opcode: opcode ...
- subversion(SVN)安装配置
简介subversion(简称svn)是近年来崛起的版本管理软件系统,是cvs的接班人.目前,绝大多数开源软件都使用svn作为代码版本管理软件.Subversion是一个版本控制系统,相对于的RCS. ...
- centos 6.5 中部署开源的Lepus(天兔)监控
这俩天一直在搞mysql数据库和centos.昨天成功的部署完mysql的主从库配置后,自己想了想是否需要个数据库监控,和执行情况的监控软件,于是就去百度上搜了一下,结果就搜到了今天的‘主角’ Lep ...
- Linux系统入门学习:在CentOS上安装phpMyAdmin
问题:我正在CentOS上运行一个MySQL/MariaDB服务,并且我想要通过网络接口来用phpMyAdmin来管理数据库.在CentOS上安装phpMyAdmin的最佳方法是什么? phpMyAd ...
- Lepus监控之安装部署
PHP和Python都是跨平台的语言,所以理论上系统应该可以支持在不同的平台上运行.但是由于时间和精力以及资源有限,目前天兔系统只测试完善了Centos/RedHat系统的支持.我们目前提供的技术支持 ...
随机推荐
- Mysql 远程登录及常用命令
第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...
- 高并发WEB网站优化方案
一.什么是高并发在互联网时代,所讲的并发.高并发,通常是指并发访问,也就是在某个时间点,有多少个访问同时到来.比如,百度首页同时有1000个人访问,那么也就是并发为1000.通常一个系统的日PV在千万 ...
- hdu 2044 递推
到达第n个格子的方案数等于第n-1个格子的方案数加上第n-2个格子的方案数. d[i]=d[i-1]+d[i-2]; AC代码: #include<cstdio> const int ma ...
- 理解 Git
Git 如何保存文件 其它版本管理系统通常会保存所有文件及其历次提交的差异(diff / revision),通过 merge 原始文件与各阶段的差异就能获取任何版本的状态 而 Git 保存的是每一次 ...
- 小程序中曾经遇到的坑(1)----canvas画布
目前正在开发小程序,在开发过程中,总会遇到一些坑,而这些坑并不会有很多开发者遇到而说出来.这里先记录一条我开发过程中遇到的问题,以便后人在开发中能够更容易的解决问题!!! 首先,小程序在canvas画 ...
- mac上搭建appium+IOS自动化测试环境(一)
阅读须知 由于OS X系统最近才开始接触,所以有些东西也不是很清楚,这里只提供方法不提供原理,能解释清楚的我也会尽量解释.可能也有一些地方说的不严谨或有错的,还望大家指点一二. 实验环境 操作系统: ...
- Appium安卓真机环境搭建
说明 步骤可能比较简洁,因为手头上有安卓测试机,所以需要配置虚拟机的童鞋请去虫师博客园,因为我也是从那儿学的,哈哈.点我飞到虫师那儿 但是如果你要搭建真机测试环境的话,本教程将是最简单实用的. 1. ...
- vim使用教程
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- 浅谈JavaScript位操作符
因为ECMAscript中所有数值都是以IEEE-75464格式存储,所以才会诞生了位操作符的概念. 位操作符作用于最基本的层次上,因为数值按位存储,所以位操作符的作用也就是操作数值的位.不过位操作符 ...
- hive:join操作
hive的多表连接,都会转换成多个MR job,每一个MR job在hive中均称为Join阶段.按照join程序最后一个表应该尽量是大表,因为join前一阶段生成的数据会存在于Reducer 的bu ...