LAMP: 一般是linux+apache+mariadb(mysql)+3P(p: php, perl, python)

LAMMP: memcached
    静态资源:静态内容;客户端从服务器获得的资源的表现形式与原文件相同;
    动态资源:通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端;

CGI:web服务器与应用程序服务器通信的协议

--------------------------------------------------------------------------------------------

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

后来出现了一种更高级的方式是, web服务器可以内置perl解释器或php解释器。 也就是说这些解释器做成模块的方式,web服务器会在启动的时候就启动这些解释器。 当有新的动态请求进来时,web服务器就是自己解析这些perl或php脚本,省得重新fork一个进程,效率提高了。

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

fastcgi跟cgi的区别是:
cgi:fork一个新的进程进行处理,处理数据时, 读取参数,处理数据,然后就结束生周期

fastcgi用tcp方式跟远程机子上的进程或本地进程建立连接,需要开启tcp端口,进入循环,等待数据的到来,处理数据

----------------------------------------------------------------------------------------------------

php解释器

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

执行流程:

1、Scanning(Lexing) —— 将PHP代码转换为语言片段(Tokens)

2、Parsing —— 将Tokens转换成简单而有意义的表达式
3、Compilation —— 将表达式编译成Opocdes
4、Execution —— 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能

基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。由此也可以看出,这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。

常见加速器:xcache  包名php-xcache

php-common提供了php配置文件(解释器读取配置文件指定了php运行环境),php包提供了httpd的模块调用文件

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

    配置文件(php.ini)在PHP启动时被读取。对于服务器模块版本的PHP,仅在php启动时读取一次。
    对于CGI和CLI 版本,每次调用都会读取。
    ini文件格式:[Foo]: Secion Header
    directive = value
    ; : 注释符;
    php.ini核心配置选项:http://php.net/manual/zh/ini.core.php
    php.ini配置选项列表:http://php.net/manual/zh/ini.list.php

httpd+php:三种方式

1.调用modules
    httpd prefork: libphp5.so
    httpd event or worker: libphp5-zts.so
2.cgi
3.fastcgi(fpm)

几种加速器:APC, eAccelerator, Xcache

请求流程:Client --> (http协议) --> httpd --> (cgi协议) --> application server (program file) --> (mysql提供的与应用程序交互的协议) --> mariadb

CentOS 7:

    程序包:httpd, php, php-mysql, mariadb-server
    注意:php要求httpd使用prefork MPM
    启动服务:
    systemctl start httpd.service
    systemctl start mariadb.server
CentOS 6:
    程序包:httpd, php, php-mysql, mysql-server
    启动服务:
    service httpd start
    service mysqld start

以Centos7为例,安装了上述三个包后

分别启动三个服务后再/var/www/cgi-bin/下面创建index.php,使用测试代码测试

php和mariadb是否生效

浏览器访问发现生效

在lamp上安装wordpress:

1.下载wordpress源码包

2.将源码包放到/var/www/html目录下

3.解压源码包,进入wordpress目录

4.设置wp-config文件

编辑:修改以下信息

根据上面的信息做数据库授权:

创建数据库:

登陆测试:

在lamp上部署phpmyadmin:

1.下载phpmyadmin源码包

2.将源码包放到/var/www/html目录下

3.解压源码包,创建软链接:

生成一段随机数:

将生成的随机数填到这里,用于基于cookie的加密密码的认证

登录测试:发现缺乏mbstring字符支持

安装mbstring:yum install php-mbstring

设置mysql管理员密码

登录测试:

lamp下搭建discuzz论坛:

1.下载discuzz的zip包,有以下多种:

2.用unzip命令解压压缩包,并且将upload目录下所有文件复制到/var/www/html下,给予写权限

3.如果你下载的是GBK语言环境的包需要修改/etc/php.ini文件支持GBK编码格式

4.测试进入安装向导

5.为discuzz创建数据库,为管理员添加密码(你也可以特意为discuzz创建用户并且授权,像前面搭建wordpress那样)

6.安装成功,管理员admin登陆成功: