LAMP简介

LAMP

LAMP简介

  • LAM(M)P:
    L:linux
    A:apache (httpd)
    M:mysql, mariadb
    M:memcached(缓存数据库数据)
    P:php, perl, python

  • WEB资源类型:

    • 静态资源:原始形式与响应内容一致,在客户端浏览器执行

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

    • 注:动静资源不是视觉上的动和静,而是看服务器端的文件和客户端看到的文件是否相同。右键单击看源代码和服务器的资源文件内容一样==>静态资源。

  • Web相关语言
    客户端技术: html,javascript,css,jpg等
    服务器端技术:php, jsp,python,asp,perl等

CGI

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

  • CGI的请求流程:
    Client – (http) --> httpd – (cgi) --> application server (program file) – (mysql) --> mysql

http最初是没有交互的功能,随着网络的发展,http需要与用户进行交互,动态交互的需求需要动态的功能实现,早期实现交互的技术-->CGI。

CGI的实现逻辑:
 Client -- (http) --> httpd -- (cgi) --> application server (program file) -- (mysql) --> mysql

    客户端将请求发送至Apache,Apache本身不能处理动态请求,但是可以通
    过用户请求的文件后缀判断出用户请求的是一个动态资源。Apache会自动启
    动一个CGI程序(CGI程序实际上是一段预先写好的CGI脚本),Apache可以
    将CGI程序激活,去处理动态请求,然后程序执行的结果返回给Apache,有
    Apache进行响应封装,生成静态的html页面,响应给客户端。

但是CGI的工作机制存在问题:并发访问同一个动态资源时,CGI不能利用缓存,有动态资源加载就开启CGI程序,目前CGI使用并不多~~效率偏低。

  • php: 脚本编程语言、嵌入到html中的嵌入式web程序语言
    基于zend编译成opcode(opcode是二进制格式的字节码,重复运行,可省略编译环境)

LAMP工作原理

PHP简介

  • 官网:http://www.php.net/

  • PHP是通用服务器端脚本编程语言,主要用于web开发实现动态web页面,也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用

  • Rasmus Lerdorf于1994年开始开发PHP,最初是一组被Rasmus Lerdorf称作“Personal Home Page Tool” 的Perl脚本, 可以用于显示作者的简历并记录用户对其网站的访问。后来,Rasmus Lerdorf使用C语言将这些Perl脚本重写为CGI程序,还为其增加了运行Web forms的能力以及与数据库交互的特性,并将其重命名为“Personal Home Page/Forms Interpreter”或 “PHP/FI”。此时,PHP/FI已经可以用于开发简单的动态web程序了,这即PHP1.0。1995年6月,Rasmus Lerdorf把它的PHP发布于comp.infosystems.www.authoring.cgi Usenet讨论组,从此PHP开始走进人们的视野。1997年,其2.0版本发布

  • 1997年,两名以色列程序员Zeev Suraski和Andi Gutmans重写的PHP的分析器(parser)成为PHP发展到3.0的基础,而且从此将PHP重命名为PHP: Hypertext Preprocessor。此后,这两名程序员开始重写整个PHP核心,并于1999年发布了Zend Engine 1.0,这也意味着PHP 4.0的诞生。2004年7月,Zend Engine 2.0发布,由此也将PHP带入了PHP 5时代。PHP5包含了许多重要的新特性,如增强的面向对象编程的支持、支持PDO(PHP Data Objects)扩展机制以及一系列对PHP性能的改进

PHP Zend Engine

  • Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司

  • Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用

  • Zend Engine的出现将PHP代码的处理过程分成了两个阶段:首先是分析PHP代码并将其转换为称作Zend opcode的二进制格式opcode(类似Java的字节码),并将其存储于内存中;第二阶段是使用Zend Engine去执行这些转换后的Opcode

PHP的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配置

  • 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的核心配置选项文档: 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            开启短标签,如<? phpinfo();?>

  • Apache支持php的两种方式:
    1.模块方式
    2.php-fpm方式

  • php以模块方式加载至httpd中:

安装php,php安装生成的文件
    # rpm -ql php
    /etc/httpd/conf.d/php.conf              配置文件
    /etc/httpd/conf.modules.d/10-php.conf   加载php模块的配置文件
    /usr/lib64/httpd/modules/libphp5.so     php模块,扩展Apache的功能模块
    /usr/share/httpd/icons/php.gif
    /var/lib/php/session

其中:# cat /etc/httpd/conf.modules.d/10-php.conf 
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
==> 说明:需要httpd工作在prefork模型,才能支持php模块

# vim /etc/httpd/conf.d/php.conf   添加php的相关配置
--> AddType text/html .php 在httpd中添加这样的选项使其支持php程序
--> DirectoryIndex index.php  使用index.php作为默认首页
--> <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>
    ====>只要是php后缀的文件,交给x-httpd-php这个程序处理php文件

==>综上:php以模块方式相当于扩展的httpd的功能,使其可以支持php程序文件。

php连接数据库

  • 数据库可能不在php所在的主机。一般不在php所在的主机。
    数据库需要创建一个能通过网络连接的用户
安装连接:# yum install php-mysql
# rpm -ql php-mysql
/etc/php.d/mysql.ini
/etc/php.d/mysqli.ini
/etc/php.d/pdo_mysql.ini
/usr/lib64/php/modules/mysql.so     php连接mysql方式1
/usr/lib64/php/modules/mysqli.so    php连接mysql方式2
/usr/lib64/php/modules/pdo_mysql.so php连接mysql方式3


【1.扩展连接数据库】

  • php使用mysql扩展连接数据库的测试代码
  • 已经淘汰
<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn) 
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

【2.mysqli扩展连接数据库】

  • php使用mysqli扩展连接数据库的测试代码
  • 面向对象,后台数据库只能连接mysql
<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>

【3.pdo扩展连接数据库】

  • php使用pdo扩展连接数据库的测试代码1
  • 更具有通用性,目前开发一般使用这种方式连接
  • PDO:PHP Data Object
  • 支持各种数据库的连接
<?php
$dsn='mysql:host=mysqlhost;dbname=test';
$username='test';
$passwd='centos';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
  • php使用pdo扩展连接数据库的测试代码2
<?php
try {
$user='test';
$pass='centos';
$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();
}
?>

LAMP架构

  • LAMP
    • httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
    • php:运行php程序
    • MariaDB:数据管理系统
  • httpd与php结合的方式
    modules (将php编译成为httpd的模块,默认方式)
    MPM:
    prefork: libphp5.so
    event, worker: libphp5-zts.so
    FastCGI

2.实现LAMP方式

  • CentOS 7:

    • Modules:httpd, php, php-mysql, mariadb-server
    • FastCGI:httpd, php-fpm, php-mysql, mariadb-server
  • CentOS 6:

    • Modules:httpd, php, php-mysql, mysql-server
    • FastCGI:默认不支持

3.基于php模块方式安装LAMP

  • CentOS 6:
    yum install httpd, php, mysql-server, php-mysql
    service httpd start
    service mysqld start

  • CentOS 7:
    yum install httpd, php, php-mysql, mariadb-server
    systemctl start httpd.service
    systemctl start mariadb.service

  • 注意:要使用prefork模型

常见LAMP应用

  • PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库

  • WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用

  • PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团

  • Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议

  • ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值