首页 > 其他分享 >LAMP知识

LAMP知识

时间:2022-08-19 15:58:48浏览次数:46  
标签:httpd php web 知识 LAMP mysql 服务器 PHP

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

  

 

标签:httpd,php,web,知识,LAMP,mysql,服务器,PHP
From: https://www.cnblogs.com/Yuanbangchen/p/16602238.html

相关文章

  • IO流知识:FilelnputStream单个字节读取文件
    1packageIO;23importjava.io.FileInputStream;4importjava.io.FileNotFoundException;5importjava.io.IOException;6/*7需求:读取"E:\\javaIo\\da......
  • Vue知识点:qs
    一、qs是什么?qs是一个增加了一些安全性的查询字符串解析和序列化字符串的库。可以进行对象与字符串之间的一个转换。二、qs的安装qs,是axios中自带的,也是npm仓库所管理的......
  • Java基础知识整理(部分)
    继承的本质是对某一类的抽象,从而实现对现实世界更好的建模1.extends的意思是扩展,子类是父类的扩展2.Java中类只有单继承,没有多继承在Java中,所有类都默认直接或间接继承Obje......
  • 数据库的基础知识和基本操作
    一.初识数据库中表的数据类型数值:1.int2.金融行业中:decimal类型字符串1.varchar可变字符串常用变量2.text大型文本保存大文本 时间日期j......
  • 基础知识与解压缩命令
    目录结构白色:表示普通文件蓝色:表示目录绿色:表示可执行文件红色:表示压缩文件浅蓝色:链接文件红色闪烁:表示链接的文件有问题黄色:表示设备文件灰色:表示其它文件打......
  • 关于C语言的基本语法知识
    由“HelloWorld”这样一个基本代码,我了解了一些C语言的基础语法知识,接下来是我对其的粗略理解。首先,我了解到了每一个C语言代码都有一个起始入口,它便是主函数main,我们......
  • 32 python并发编程之背景知识
    32python并发编程之背景知识 目录:一引子二为什么要有操作系统三什么是操作系统四操作系统与普通软件的区别五操作系统发展史六总结视频链接:......
  • Java面试知识点总结(三)
    Java并发编程一、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"......
  • 【技术总结】大数据开发模块化知识体系、学习路线及对应的资料推荐
    〇、概述1、常用网站2、常用资料一、环境LinuxShellGitMavenDockerK8SRancher二、数据库MySQLOracleSqlServerPostgreSQLHBASEClickHouse三、ETL工具K......
  • Bert不完全手册7. 为Bert注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert
    借着ACL2022一篇知识增强Tutorial的东风,我们来聊聊如何在预训练模型中融入知识。Tutorial分别针对NLU和NLG方向对一些经典方案进行了分类汇总,感兴趣的可以去细看下。这一章......