linux进阶-了解LAMP架构基础

LAMP介绍

LAMP的含义:

  • L: linux
  • A: apache httpd
  • M: mysql, mariadb
  • P: php, python

Web资源类型

  • 静态资源:原始形式与响应内容一致
  • 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端

LAMP工作原理

在这里插入图片描述

  • 当客户端请求静态资源时,web服务器直接把静态资源返回客户端
  • 当客户端请求动态资源时,httpd的php模块会进行动态运算,如果过程需要数据库的数据作为运算参数时,php连接数据库取得相应数据,运算的结果转换为静态资源由web服务器返回客户端
  • CGI(Common Gateway Interface):httpd程序与php之间数据传输的标准

php

  • php是一种脚本编程语言,同时也是一种可以嵌入到html中的嵌入式web程序语言

  • Zend Engine:开源的、php脚本语言的解释器

  • Opcode:php脚本编译后的中间语言,顺次执行opcode,每次执行一条,实现php脚本的解释执行

cgi和fastcgi

cgi

  • CGI:Common Gateway Interface 公共网关接口
  • CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;
  • CGI描述了客户端和服务器程序之间传输的一种标准
    请求流程:
  • Client – (http协议) --> httpd – (cgi协议) --> application server (program file) – (mysql协议) --> mysql

fastcgi

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

cgi和hastcgi区别

在这里插入图片描述

在这里插入图片描述

PHP

什么是PHP?

  • PHP原始为Personal Home Page的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”。自20世纪90年代国内互联网开始发展到现在,互联网信息几乎覆盖了我们日常活动所有知识范畴,并逐渐成为我们生活、学习、工作中必不可少的一部分。据统计,从2003 年开始,我国的网页规模基本保持了翻番的增长速度,并且呈上升趋势。PHP 语言作为当今最热门的网站程序开发语言,它具有成本低、速度快、可移植性好、 内置丰富的函数库等优点,因此被越来越多的企业应用于网站开发中。但随着互联网的不断更新换代,PHP语言也出现了不少问题。
  • 根据动态网站要求,PHP语言作为一种语言程序,其专用性逐渐在应用过程中显现,其技术水平的优劣与否将直接影响网站的运行效率。其特点是具有公开的源代码, 在程序设计上与通用型语言,如C语言相似性较高,因此在操作过程中简单易懂,可操作性强。同时,PHP语言具有较高的数据传送处理水平和输出水平,可以广泛应用在Windows系统及各类Web服务器中。如果数据量较大,PHP语言还可以拓宽链接面,与各种数据库相连,缓解数据存储、检索及维护压力。随着技术的发展,PHP 语言搜索引擎还可以量体裁衣,实行个性化服务,如根据客户的喜好进行分类收集储存,极大提高了数据运行效率。

PHP的opcode语言

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

即:扫描–>分析–>编译–>执行

PHP配置

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

/etc/php.ini配置文件

[foo]:Section Header
directive = value

注释符:
- 以#开头,纯粹的注释信息
- 以 ; 开头,用于注释可启用的directive
- 提示:较新的版本中,已经完全使用 “ ; ” 进行注释

php.ini配置参考文档
php.ini的核心配置选项文档: http://php.net/manual/zh/ini.core.php
php.ini配置选项列表:http://php.net/manual/zh/ini.list.php

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 开启短标签,如:

php语言格式

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();
?>

LAMP实现方法

  • httpd 接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由
    php来运行
  • httpd与php结合的方式
    • modules :将php编译成为httpd的模块libphp5.so,只有prefork 模式才支持
    • FastCGI
      LAMP架构实现
      静态资源:
    • Client – http --> httpd
      动态资源:
  • Client – http --> httpd --> libphp5.so () – mysql --> MySQL server Client – http --> httpd -->fastcgi-- mysql --> MySQL server

实现LAMP

利用rpm包实现LAMP安装部署

centos 8
Module方式

dnf install httpd mariadb-server php php-mysqlnd

FastCGI方式

dnf install httpd mariadb-server php-fpm php-mysqlnd

centos 7
Module方式

yum install httpd php php-mysql mariadb-server

FastCGI方式

yum install httpd php-fpm php-mysql mariadb-server

centos 6
Module方式

yum install httpd, php, php-mysql, mysql-server

FastCGI方式:默认不支持


注意:基于module实现,httpd 需要 使用prefork模型

PHP连接MySQL的方式

使用mysql扩展连接数据库

使用mysql扩展模块mysql.so连接数据,此方式已经在php 7版后淘汰
范例:php使用mysql扩展连接数据库的测试代码

<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

使用mysqli扩展连接数据库

使用mysqli扩展模块mysqli.so连接数据,此方式只能连接MySQL数据库,不支持其它数据库
范例:php使用mysqli扩展连接数据库的测试代码

<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>

使用PDO(PHP Data Object)扩展连接数据库

使用PDO扩展模块pdo_mysql.so连接数据库,此方式可以支持连接MySQL,Oracle等多种数据库
范例:php使用pdo扩展连接数据库的测试代码1

<?php
$dsn='mysql:host=mysqlhost;dbname=test';   #注意主机地址
$username='root';
$passwd='magedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>

范例:php使用pdo扩展连接数据库的测试代码2

<?php
try {
$user='root';
$pass='magedu';
$dbh = new PDO('mysql:host=mysqlhost;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();
}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章