LAMP介绍

image-20200518162850038

  • LAM(M)P:

    L:linux A:apache (httpd)

    M:mysql, mariadb M:memcached P:php, perl, python

  • WEB资源类型:

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

    • 客户端技术: html,javascript,css
    • 服务器端技术:php, jsp,python,asp

CGI

  • CGI:Common Gateway Interface

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

  • 请求流程:

    Client – (http) –> httpd – (cgi) –> application server (program file)– (mysql) –> mysql

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

LAMP工作原理

image-20200518163158402

PHP

简介

  • 官网:https://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性能的改进

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

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脚本的功能
  • 扫描–>分析–>编译–>执行

配置

  • 配置文件:/etc/php.ini, /etc/php.d/*.ini

  • 配置文件在php解释器启动时被读取

  • 对配置文件的修改生效方法

    • Modules:重启httpd服务
    • FastCGI:重启php-fpm服务
  • /etc/php.ini配置文件格式:

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

测试代码

  • php语言格式

    1
    2
    3
    <?php
    ...php code...
    ?>
  • php测试代码

    1
    2
    3
    4
    <?php
    echo date("Y/m/d H:i:s");
    phpinfo();
    ?>
  • 格式1

    1
    2
    3
    <?php
    echo "<h1>Hello world!</h1>"
    ?>
  • 格式2

    1
    2
    3
    <h1>
    <?php echo "Hello world!" ?>
    </h1>

    实现LAMP

  • LAMP

    • httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
    • php:运行php程序
    • MariaDB:数据管理系统
  • httpd与php结合的方式

    • modules (将php编译成为httpd的模块,默认方式)

      1
      2
      3
      4
      MPM:
      prefork: libphp5.so
      event, worker: libphp5-zts.so
      FastCGI
  • 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:默认不支持

安装(基于php模块,未采用编译)

CentOS 7:

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

systemctl start httpd.service

systemctl start mariadb.service

注意:要使用prefork模型

mysql拓展连接数据库

php使用mysql扩展连接数据库的测试代码

1
2
3
4
5
6
7
8
9
<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

mysqli拓展连接数据库

php使用mysqli扩展连接数据库的测试代码

1
2
3
4
5
6
7
8
9
10
<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>

使用PDO(PHP Data Object)

  • php使用pdo扩展连接数据库的测试代码1

    1
    2
    3
    4
    5
    6
    7
    <?php
    $dsn='mysql:host=mysqlhost;dbname=test';
    $username='root';
    $passwd='magedu';
    $dbh=new PDO(dsn,username,passwd);
    var_dump($dbh);
    ?>
  • php使用pdo扩展连接数据库的测试代码2

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?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();
    }
    ?>

    常见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

部署phpMyadmin

  • yum -y install httpd mariadb-server php php-mysql

  • systemctl start httpd

  • systemctl start mariadb

  • mysql_secure_installation

  • 下载:http://www.phpmyadmin.net/downloads/

  • tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz cd /var/www/html

  • cd phpadmin/

  • cp config.sample.inc.php config.inc.php

  • yum -y install php-mbstring

  • systemctl reload httpd

部署wordpress

  • 下载地址:

    官网:https://cn.wordpress.org/

  • 解压缩WordPress博客程序到网页站点目录下

    unzip wordpress-5.0.4-zh_CN.zip

  • 新建wpdb库和wpuser用户

    mysql> create database wpdb;

    mysql> grant all on wpdb.* to wpuser@'%' identified by "wppass";

  • 打开http://webserver/wordpress进行页面安装

  • 注意wordpress目录权限

    setfacl –R –m u:apache:rwx /var/www/html/wordpress/

    或者

    chown –R apache.apache /var/www/html/wordpress

部署Discuz

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

  • 下载源码:

    wget http://download.comsenz.com/DiscuzX/3.3/Discuz_X3.3_SC_UTF8.zip

  • unzip Discuz_X3.3_SC_UTF8.zip

  • mv upload/ /var/www/html/forum

  • setfacl -R -m u:apache:rwx /var/www/html/forum

  • mysql>create database discuz;

    mysql>grant all on discuz.* to discuz@'172.16.0.%’identified by"magedu";

  • 安装向导:http://localhost/forum