LAMP知识

LAM(M)P:
	L:linux
	A:apache (httpd) NGINX
	M:mysql, mariadb
	M:memcached
	P:php, perl, python

WEB资源类型:
	静态资源:原始形式与响应内容一致,在客户端浏览器执行
	动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
	注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致
Web相关语言
	客户端技术: html,javascript,css,jpg
	服务器端技术:php, jsp,python,asp

	
LNMP工作原理
	浏览器发送http request(请求)请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,
然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,
PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx.
服务器再通过Http response(响应)的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。 

LAMP的实现原理
	浏览器向服务器发送http请求,服务器 (Apache) 接受请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。
Apache会将一些静态资源保存,然后去调用php处理模块进行php脚本的处理。脚本处理完后,Apache将处理完的信息通过http response的方式发送给浏览器,
浏览器解析,渲染等一系列操作后呈现整个网页。
	1.当客户端请求的静态资源时,WEB服务器会直接把静态资源返回客户端
	2.当客户端请求的动态资源时,http的php模块会进行相应的动态资源运算,如果此过程还需要数据库的数据作为运算参数时,php会连接数据库取得数据然后进行运算,
运算结果转为静态资源由WEB服务器返回到客户端。	
	
	

CGI
CGI:Common Gateway Interface 公共网关接口
更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,
然后会fork一个新进程来运行外部c程序(或bash,perl脚本等), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,
刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准

请求流程:
	Client -- (http) --> httpd -- (cgi) --> application server (program file) -- (mysql) --> mysql
	
fastcgi
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),
web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,
最后自己接着等待下一个请求的到来,而不是退出

请求流程:
Client — (http协议) –> httpd — (fastcgi协议) –> fastcgi服务器 — (mysql协议) –> mysql	
	


php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
	基于zend编译成opcode(二进制格式的字节码,重复运行,可省略编译环境)
	
PHP简介
	PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,
php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用
	Zend Engine是开源的、PHP脚本语言的解释器。
	Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP 代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),
并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode


Opcode是一种PHP脚本编译后的中间语言,类似于Java的ByteCode,或 者.NET的MSL。PHP执行PHP脚本代码一般会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend)
	1、Scanning 词法分析,将PHP代码转换为语言片段(Tokens)
	2、Parsing 语义分析,将Tokens转换成简单而有意义的表达式
	3、Compilation 将表达式编译成Opcode
	4、Execution 顺次执行Opcode,每次一条,从而实现PHP脚本的功能
  即:扫描-->分析-->编译-->执行

php:脚本语言解释器
配置文件:/etc/php.ini, /etc/php.d/*.ini
配置文件在php解释器启动时被读取
对配置文件的修改生效方法
	Modules:重启httpd服务
	FastCGI:重启php-fpm服务

/etc/php.ini配置文件格式: (php-common)
	[foo]:Section Header
	directive = value
	注释符:较新的版本中,已经完全使用;进行注释
	#:纯粹的注释信息
	;:用于注释可启用的directive

php常见设置:rpm -ql 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 开启短标签,如<? phpinfo();?> expose_php = On #在响应报文显示首部字段x-powered-by: PHP/x.y.z,暴露php版本,建议设为off httpd与php结合的方式: 1.modules (将php编译成为httpd的模块,默认方式)1.prefork: libphp5.so 3.event, worker: libphp5-zts.so 2.FastCGI: php-fpm CentOS 8或7: Modules:httpd, php, php-mysql, mariadb-server 基于php模块方式安装LAMP,注意:要使用prefork模型 FastCGI:httpd, php-fpm, php-mysql, mariadb-server CentOS 6: Modules:httpd, php, php-mysql, mysql-server FastCGI:默认不支持 静态资源: Client — http –> httpd 动态资源: Client — http –> httpd –> libphp5.so () — mysql –> MySQL server Client — http –> httpd –> fastcgi–> mysql –> MySQL server CentOS 6: Module yum install httpd, php, mysql-server, php-mysql FastCGI 默认不支持 CentOS 7: Module yum install httpd, php, php-mysql, mariadb-server 注意:要使用prefork模型 FastCGI yum install httpd mariadb-server php-fpm php-mysqlnd CentOS 8: Module dnf install httpd mariadb-server php php-mysqlnd FastCGI dnf install httpd mariadb-server php-fpm php-mysqlnd 基于php模块方式安装LAMP php测试代码 <?php echo date("Y/m/d H:i:s"); phpinfo(); ?> php 连接数据库的接口方式: php使用mysql扩展连接数据库的测试代码 <?php $conn = mysql_connect('localhost','root','123456'); if ($conn) echo "OK"; else echo "Failure"; #echo mysql_error(); mysql_close(); ?> php使用mysqli扩展连接数据库的测试代码(只能连接mysql) <?php $mysqli=new mysqli("localhost", "root", "123456"); if(mysqli_connect_errno()){ echo "Failure"; $mysqli=null; exit; } echo "OK"; $mysqli->close(); ?> php使用pdo(PHP Data Object)扩展连接数据库的测试代码(常用方式) <?php $dsn='mysql:host=mysqlhost;dbname=test'; $username='root'; $passwd='123456'; $dbh=new PDO($dsn,$username,$passwd); var_dump($dbh); ?> dsn:数据库( oracle mysql) host:localhost或IP dbname:数据库 实例: php使用pdo扩展连接数据库的测试代码 <?php try { $user='root'; $pass='passwd1234'; $dbh = new PDO('mysql:host=localhost;dbname=mysql', $user, $pass); foreach($dbh->query('SELECT user,host from user') as $row) { print_r($row); }$dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>

  

简单实例 

CentOS 7: 基于php模块方式安装
yum install httpd, php, php-mysql, mariadb-server
#php测试代码
[root@localhost7C ~]# cat /var/www/html/index.php 
<?php
  echo date("Y/m/d H:i:s");
  phpinfo();
?>
运行数据库脚本设置root密码)
mysql_secure_installation

#php使用pdo(PHP Data Object)扩展连接数据库的测试代码
[root@localhost7C ~]# cat /var/www/html/mysql.php 
<?php
try {
$user='root';
$pass='zzhz2022';
$dbh = new PDO('mysql:host=localhost;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>

systemctl restart httpd mariadb

  

php的加速器(适合老版本,版本7以上不用)

	php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译
阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的
	常见的php加速器有:
		1、APC (Alternative PHP Cache)
		2、eAccelerator
		3、XCache
		4、Zend Optimizer和Zend Guard Loader
		5、NuSphere PhpExpress

实验:编译安装xcache实现加速
1.安装方法
rpm包:来自epel源
yum install php-xcache
2.编译安装 (本步骤接,基于LAMP应用实现wordpress个人博客系统) yum -y install php-devel gcc 下载并解压缩xcache-3.2.0.tar.bz2 cd xcache-3.2.0 cat INSTALL 查看安装信息 phpize 生成编译环境 ./configure --enable-xcache make && make install ...省略... Installing shared extensions: /opt/remi/php56/root/usr/lib64/php/modules/ cp xcache.ini /etc/php.d/ #复制模块到php配置目录下。 systemctl restart httpd.service 使用ab命令测试对比。

3.opcache加速php 7.X [root@centos8 ~]#dnf install php-opcache [root@centos8 ~]#cat /etc/php.ini [opcache] zend_extension=opcache.so opcache.enable=1

  

 

posted @ 2022-08-19 15:46  yuanbangchen  阅读(20)  评论(0编辑  收藏  举报