1. LAPM架构简介
LAMP 环境 指的是在 Linux 操作系统中分别安装 Apache 网页服务器 、MySQL 数据库服务器 和 PHP 开发服务器,以及一些对应的扩展软件。AMP也支持win操作系统
LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态web站点服务及其应用开发环境。(前台)Apache:作为LAMP架构的前端,是一款功能强大,稳定性好的web服务器程序,该服务器直接面向用户提供网站访问,发送网页,图片等内容。
**后台Mysql:**作为LAMP架构的后端,是一款流行的开源关系型数据库。在企业网站、业务系统应用中,各种账户信息、产品信息,客户资料、业务数据等都可以存储到mysql数据库,其他程序可以通过sql语句来查询,更改这些信息。
**(中间连接)PHP/Perl/Python:**作为三种开发动态的网页编程语言,负责解释动态网页文件,负责沟通web服务器和数据库系统已协同工作,并提供web应用程序的开发运行环境。其中PHP是一种广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于web应用开发。
1.1 动态资源与语言
WEB资源类型:
- 静态资源:原始形式与响应内容一致,在客户端浏览器执行
- 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致
静态资源示例:
bash
vim test.html
#客户端主机现在的时间:
<script type="text/javascript">
document.write(new Date());
</script>
1.2 LAPM架构得组成
- L:linux
- A:apache (httpd)
- M:mysql, mariadb
- P:php, perl, python
1.3 LAPM架构说明
工作过程:
- 当客户端请求的是静态资源时,web服务器会直接把静态资源返回给客户端
- 当客户端请求的是动态资源时,http的php模块会进行相应的动态资源运算,如果此过程还需要数据的数据作为运算参数时,php会连接mysql取得数据然后进行运算,运算结果转为静态资源由web服务器返回到客户端。
apache主要实现如下功能:
- 处理http的请求、构建响应报文等自身服务;
- 配置让Apache支持PHP程序的响应(通过PHP模块或FPM);
- 配置Apache具体处理php程序的方法,如通过反向代理将php程序交给fcgi处理
mysql 主要实现如下功能:
- 提供PHP程序对数据的存储;
- 提供PHP程序对数据的读取(通常情况下从性能的角度考虑,尽量实现数据库的读写分离)。
**php**主要实现如下功能:
- 第一:提供apache的访问接口,即CGI或Fast CGI(FPM);
- 第二:提供PHP程序的解释器;
- 第三:提供mysql数据库的连接函数的基本环境。
1.4 CGI和astcgi
1.4.1CGI
CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
请求流程: Client -- (http协议) --> httpd -- (cgi协议) --> application server (program file) -- (mysql协议) --> mysql
1.4.2 fastcgi
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出 请求流程: Client -- (http协议) --> httpd -- (fastcgi协议) --> fastcgi服务器 -- (mysql协议) --> mysql
1.4.3 CGI和fastcgi比较
**CGI:**兼职, 一次性的过河拆桥式的服务 FASTCGI: 专职,全周期的持续式的服务
名称 | 在web服务器方面 | 在对数据进行处理的进程方面 |
---|---|---|
cgi | fork一个新的进程进行处理 | 读取参数,处理数据,然后就结束生命期 |
fastcgi | 用tcp方式跟远程主机上的进程或本地进程建立连接 | 要开启tcp端口,进入循环,等待数据的到来,处理数据 |
2、PHP
PHP(Hypertext Preprocessor 超文本预处理器)是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
2.1 PHP的Opcode语言
Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或者.NET的MSL
PHP的语言引擎Zend执行PHP脚本代码一般会经过如下4个步骤
- Scanning 词法分析,将PHP代码转换为语言片段(Tokens)
- Parsing 语义分析,将Tokens转换成简单而有意义的表达式
- Compilation 将表达式编译成Opcode
- Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能
即:扫描-->分析-->编译-->执行
4.3 PHP 配置
php 的配置文件:/etc/php.ini
, /etc/php.d/*.ini
配置文件在php解释器启动时被读取
对配置文件的修改生效方法
- Modules:重启httpd服务
- FastCGI:重启php-fpm服务
/etc/php.ini
配置文件格式:
bash
[foo]:Section Header
directive = value
注释符:
- 以#开头,纯粹的注释信息
- 以 ; 开头,用于注释可启用的directive
php常见设置
bash
expose_php = On #响应报文显示首部字段x-powered-by: PHP/x.y.z,暴露php版本,建议为off
max_execution_time= 30 #最长执行时间30s
memory_limit=128M #生产不够,可调大
display_errors=off #调试使用,不要打开,否则可能暴露重要信息
display_startup_errors=off #建议关闭
post_max_size=8M #最大上传数据大小,生产可能调大,比下面项大
upload_max_filesize =2M #最大上传文件,生产可能要调大
max_file_uploads = 20 #同时上传最多文件数
date.timezone =Asia/Shanghai #指定时区
short_open_tag=on #开启短标签,如: <? phpinfo();?>
3. 搭建LAMP平台
编译安装Apache,mysql,php,然后使用搭建的LAMP平台安装论坛和博客