LAMP架构
1. LAMP介绍
1.1 动态资源和静态资源
- 静态资源:原始形式与响应内容一致,在客户端浏览器执行
- 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
注意:静态和动态的区别,不在于网页是否能动态变化,而是客户端的程序文件是否和服务器端的程序文件保持一致。
WEB相关语言
- 客户端技术: html,javascript,css,jpg
- 服务器端技术:php, jsp,python,asp
1.2 LAMP架构具体组成
- L:linux
- A:apache (httpd)
- M:mysql, mariadb
- M:memcached
- P:php, perl, python
2. PHP
2.1 PHP简介
PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。
php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
2.2 PHP的Opcode语言
PHP的语言引擎Zend执行PHP脚本代码一般会经过如下4个步骤
- Scanning 词法分析,将PHP代码转换为语言片段(Tokens)
- Parsing 语义分析,将Tokens转换成简单而有意义的表达式
- Compilation 将表达式编译成Opcode
- Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能
即:扫描–>分析–>编译–>执行
所以,Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或者.NET的MSL。
2.3 PHP配置
php配置文件路径::/etc/php.ini
/etc/php.d/*.ini
修改配置文件后生效方法:
- Modules:重启httpd服务
- FastCGI:重启php-fpm服务
以#开头,纯粹的注释信息,以 ; 开头,用于注释可启用的directive
提示:较新的版本中,已经完全使用 “ ; ” 进行注释
2.3.1 php常见配置
- 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 开启短标签
2.3.2 php语言格式
格式1:
<?php
echo "<h1>Hello world!</h1>"
?>
格式2:
<h1>
<?php echo "Hello world!" ?>
</h1>
php测试代码
<?php
echo date("Y/m/d H:i:s");
phpinfo();
?>
3. LAMP实现方式
3.1 httpd和php调用方式
httpd调用php的方式,或者说动态资源的获取方式有两种:
- CGI
- FASTCGI
3.2 CGI
CGI:Common Gateway Interface 公共网关接口
web服务器会根据这次请求的内容,然后会fork一个新进程来处理请求, 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
请求流程
Client -- (http协议) --> httpd -- (cgi协议) --> application server (program file) -- (mysql协议) --> mysql
3.3 FASTCGI
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启
动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用
了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接
着等待下一个请求的到来,而不是退出。
请求流程
Client -- (http协议) --> httpd -- (fastcgi协议) --> fastcgi服务器 -- (mysql协议) --> mysql