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

CGI

CGI:Common Gateway Interface(通用网关接口)

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

请求流程:

Client -- (httpd) --> httpd -- (cgi) --> application server (program file) -- (mysql) --> mysql

php: 脚本编程语言、嵌入到html中的嵌入式web程序语言

基于zend编译成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

1> Zend Engine是开源的、PHP脚本语言的解释器,它最早是由以色列理工学院(Technion)的学生Andi Gutmans和Zeev Suraski所开发,Zend也正是此二人名字的合称。后来两人联合创立了Zend Technologies公司
2> Zend Engine 1.0于1999年随PHP 4发布,由C语言开发且经过高度优化,并能够做为PHP的后端模块使用。Zend Engine为PHP提供了内存和资源管理的功能以及其它的一些标准服务,其高性能、可靠性和可扩展性在促进PHP成为一种流行的语言方面发挥了重要作用
3> 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配置

(1)php:脚本语言解释器

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

(3)配置文件在php解释器启动时被读取

(4)对配置文件的修改生效方法

Modules:重启httpd服务
FastCGI:重启php-fpm服务

/etc/php.ini配置文件格式:

[foo]:Section Header
directive = value

注释符:较新的版本中,已经完全使用;进行注释

#:纯粹的注释信息
;:用于注释可启用的directive

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

php.ini的核心配置选项文档: http://php.net/manual/zh/ini.core.php

php.ini配置选项列表:

http://php.net/manual/zh/ini.list.php

php语言格式

<?php
...php code...
?>

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

Php使用mysqli扩展连接数据库 

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

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

实验演示:

A主机:192.168.34.101

B主机:192.168.34.102

(1)在B主机上安装mariadb-server服务并启动服务

[root@centos777~]#yum install mariadb-server  -y
[root@centos777~]#systemctl start mariadb

(2)在B主机上创建一个测试用户

grant all on *.* to test@'192.168.34.%' identified  by 'centos';

(3)在A主机安装php-mysql包

[root@centos7html]#yum install php-mysql -y

(4)在A主机的/var/www/html目录下写PHP文件

[root@centos7html]#cd /var/www/html
[root@centos7html]#vim mysqli.php 写入php脚本
<?php
$mysqli=new mysqli("192.168.34.102","test","centos");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>

(5)在网站上测试页面效果,输入192.168.34.101/mysqli.php即可访问到代码结果

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

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

主机A:192.168.34.101

主机B:192.168.34.102

(1)修改主机A的php脚本

[root@centos7html]#vim pdo.php
<?php
$dsn='mysql:host=192.168.34.102;dbname=test';
$username='test';
$passwd='centos';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>

(2)主机B的数据库服务启动

systemctl start mariadb

(3)在网站上进行测试页面

输入192.168.34.101/pdo.php即可访问当代码结果

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

(1)修改主机A的php脚本

cd /var/www/html

vim pdo1.php

<?php
try {
$user='test';
$pass='centos';
$dbh = new PDO('mysql:host=192.168.34.102;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();
}
?>

(2)在网站上进行测试页面  

 

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

下载网址:https://www.phpmyadmin.net/downloads/  

LAMP部署:

(1)下载PhpMyAdmin包,并传到linux系统上,并解压改名

rz  传到linux包

[root@centos7html]#tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.xz    解压包
[root@centos7html]#mv phpMyAdmin-4.0.10.20-all-languages pma 起名为pma

(2)查看需要需要哪些包,实现LAMP的前提,安装对应的包,启动mariadb,httpd服务

[root@centos7pma]#yum install php-mbstring -y
[root@centos7pma]#yum install php
[root@centos7pma]#yum install php-mysql
[root@centos7pma]#yum install maridb-server
[root@centos7pma]#yum install httpd

(3)在修改后目录名的pma下,修改配置文件名称,只需要将配置文件的密码进行修改随机修改即可

[root@centos7pma]#cd pma
[root@centos7pma]#cp config.sample.inc.php config.inc.php
[root@centos7pma]#vim config.inc.php

(4)修改完配置之后需要重启httpd服务,并在网站输入本地IP地址加上pma目录名

systemctl  restart httpd

 192.168.34.101/pma

创建一个数据库wordpress

创建一个用户并授权连接192.168.34.%主机

 实现wordpress博客搭建

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

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

(1)官网下载wordpress包,并将包解压缩

[root@centos7html]#rz
[root@centos7html]#unzip wordpress-5.0-zh_CN.zip
[root@centos7html]#pwd
/var/www/html

(2)安装相关的软件包

[root@centos7html]#yum install php -y
[root@centos7html]#yum install php-mysql -y
[root@centos7html]#yum install mariadb-server -y
[root@centos7~]#yum install httpd -y

(3)切换到wordpress目录下,并将wp-config-sample.conf改名称

[root@centos7html]#cd wordpress/
[root@centos7wordpress]#ls
index.php wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php
license.txt wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php
readme.html wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php
[root@centos7wordpress]#cp wp-config-sample.php wp-config.php

(4)此时wordpress博客已经搭建完毕,我们来登陆看一下里边内容,填写完信息之后,点击安装wordpress就会安装大量的表

布署Discuz网站

官网:https://www.discuz.net/forum.php

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

(1)将Discuz包传到linux中,并解压缩

[root@centos7html]#cd /var/www/html
[root@centos7html]#rz
[root@centos7html]#unzip Discuz_X3.3_SC_UTF8.zip
[root@centos7html]#ls
Discuz_X3.3_SC_UTF8.zip pdo1.php phpMyAdmin-4.0.10.20-all-languages.tar.xz readme utility wordpress-4.9.4-zh_CN.tar.gz
mysqli.php pdo.php pma upload wordpress

(2)开始Discuz安装

[root@centos7html]#setfacl -R -m u:apache:rwx  upload/

(3)开始安装upload

在网页上输入192.168.34.101/upload,然后根据向导直接往下安装

默认选择全新安装,然后下一步

设置论坛账号密码:

此时登录论坛账号和密码:

(4)安装完论坛之后将apache用户的权限取消

[root@centos7html]#setfacl -R -m u:apache:- upload/

布署fastcgi 

A主机:192.168.34.100(安装数据库)

B主机:192.168.34.102  (安装的是php、httpd服务,处理php程序)

(1)B主机上安装php和httpd相应的包

[root@centos777~]#yum install php-fpm php-mysql -y
[root@centos7~]#yum install httpd -y

(2)在A主机安装mariadb-server,启动mysql服务,并创建一个test账号,授予所有权限

[root@centos7~]#yum install mariadb-server -y
[root@centos7~]#systemctl start mariadb
MariaDB [(none)]> create database wordpress; 创建一个数据库
MariaDB [(none)]> grant all on *.* to test@'192.168.34.%' identified by 'centos';创建一个数据库账号

(3)在B主机上查看php-fpm包信息,并修改指定的配置文件

修改配置文件并重新启动php服务

[root@centos777~]#vim /etc/php-fpm.d/www.conf
[root@centos777~]#systemctl restart php-fpm.service

(4)在B主机上新建一个目录,并在目录下创建一个pdo.php程序

修改完配置之后最好重新启动php服务:systemctl restart php-fpm.service

[root@centos777~]#mkdir /data/html
[root@centos777~]#cd /data/html
[root@centos777html]#vim pdo.php 目的是为了连接数据库
<?php
try {
$user='test';
$pass='centos';
$dbh = new PDO('mysql:host=192.168.34.100;dbname=mysql', $user, $pass); 连接A主机的数据库
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>

(5)在B主机上新建一个配置文件,并修改相关内容

[root@centos7~]#vim /etc/httpd/conf.d/fcgi.conf  新建一个配置文件,并修改相关内容
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.34.102:9000/data/html/$1
[root@centos7~]#cd /var/www/html
[root@centos7html]#echo 192.168.34.101 > index.html 新建一个index.html文件
[root@centos7html]#systemctl restart httpd 重新启动httpd服务

(6)测试搭建效果:

下来基于fastcgi搭建wordpress

(1)将wordpress包导入到linux中,然后解压此包

[root@centos777html]#cd /data/html
[root@centos777html]#rz
[root@centos777html]#unzip wordpress-5.0-zh_CN.zip

(2)修改wordpress包里边的配置文件

[root@centos777html]#cd wordpress/
[root@centos777wordpress]#ls
index.php wp-activate.php wp-comments-post.php wp-cron.php wp-load.php wp-settings.php xmlrpc.php
license.txt wp-admin wp-config-sample.php wp-includes wp-login.php wp-signup.php
readme.html wp-blog-header.php wp-content wp-links-opml.php wp-mail.php wp-trackback.php
[root@centos777wordpress]#cp wp-config-sample.php wp-config.php
[root@centos777wordpress]#vim wp-config.php

查看搭建wordpress博客效果:http://192.168.34.102/wordpress/wp-admin/install.php

显示此效果,是因为此时是基于php页面进行查找结果,本机如果没有静态页面就无法找到

此时在B主机上,需要在/var/www/html目录下在解压一份wordpress包,就可以找到静态的php页面:

[root@centos777html]#cd /var/www/html
[root@centos777html]#ls
index.html wordpress wordpress-5.0-zh_CN.zip
[root@centos777html]#unzip wordpress-5.0-zh_CN.zip

  

 

 

 

  

 

  

  

  

 

 

 

  

  

  

 

 

  

 

实现LAMP架构的更多相关文章

  1. Netlog 的数据库及 LAMP 架构

    Database Sharding@Netlog 详细的描述了 Netlog 数据库架构的演变过程,文章浅显易懂,非常值得学习.本文数据.图片均来自:Database Sharding at Netl ...

  2. LNMP 与 LAMP 架构的区别及配置解决方案

    2014-12-31 10:33| 发布者: digitser| 查看: 5618| 评论: 0|原作者: liangsheng 摘要: LNMP 与 LAMP 架构的区别及配置解决方案 LNMP 的 ...

  3. Apache web服务器(LAMP架构)(week3_day4)--技术流ken

    apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 3).URL 统一资源定位符 http:/ ...

  4. 末学者笔记--apache编译安装及LAMP架构上线

    apache介绍 一.Apache的三种工作模式 Apache一共有3种稳定的MPM模式(多进程处理模块),它们分别是prefork.worker.event.http-2.2版本的httpd默认的m ...

  5. LAMP架构部署和动态网站环境的配置

    实验环境: 操作系统:centos 7.5 服务器IP:192.168.10.5 运行用户:root 连接工具:xshell工具 web环境:Linux+apache+php+mariadb(LAMP ...

  6. Apache web服务器(LAMP架构)

    Apache web服务器(LAMP架构) apache介绍 1).世界上使用率最高的网站服务器,最高时可达70%:官方网站:apache.org 2).http 超文本协议 HTML 超文本标记语言 ...

  7. LAMP架构(三)

    第十九课 LAMP架构(三) 目录 一.配置防盗链 二.访问控制Directory 三.访问控制FilesMatch 四.限定某个目录禁止解析php 五.限制user_agent 六.php相关配置 ...

  8. LAMP架构(二)

    第十八次课 LAMP架构(二) 目录 一.Apache默认虚拟主机 二.Apache用户认证 三.域名跳转 四.Apache访问日志 五.访问日志不记录静态文件 六.访问日志切割 七.静态元素过期时间 ...

  9. LAMP架构上(一)

    第十七课LAMP架构上(一) 目录 一.LAMP架构介绍 二.MySQL.MariaDB介绍 三.MySQL安装 四.MariaDB安装 五.Apache安装 六.安装PHP5 七.安装PHP7 八. ...

  10. rhel6+apache2.4+mysql5.7+php5.6部署LAMP架构

    rhel6+apache2.4+mysql5.7+php5.6部署LAMP架构 2017年10月01日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~准备阶段~~~~~~~~~~~~~ ...

随机推荐

  1. fiddler https 抓包

    手机上https抓包: http://blog.csdn.net/wangjun5159/article/details/52202059 需要给fiddler安装插件CertMaker for iO ...

  2. ubuntu16.04 TLS安装java

    apt-get install software-properties-commonadd-apt-repository ppa:webupd8team/javaapt-get updateapt-g ...

  3. Tools - 关于Network

    Tcpdump homepage - tcpdump wiki - tcpdump Wireshark homepage - wireshark wiki - wireshark Wireshark基 ...

  4. 【Aizu - 0189】Convenient Location (最短路 Floyd算法)

    Convenient Location 直接翻译了 Descriptions 明年毕业的A为就业而搬家.就职的公司在若干城市都有办公室,不同天出勤的办公室也不同.所以A在考虑住在哪去各个办公室的时长最 ...

  5. Memcached的安装与常用命令

    一.概述 MSM:Memcached-Session-ManagerMemcached是一款高性能.分布式的内存对象缓存系统 二.安装Memcached 在安装Memcached之前,我们需要先安装上 ...

  6. VMware中 CentOs虚拟机的安装教程

    首先点击创建新的虚拟机 选择典型安装,点击下一步 这里我们选择稍后安装操作系统,然后点击下一步 这里我们操作系统选择Linux操作系统,版本选择CentOs 7 64位,然后点击下一步 这里我们可以修 ...

  7. Python: 对于DataFrame.loc传入列表和传入元组输出区别的理解

    def test(): import pandas as pd tuples = [ ('cobra', 'mark i'), ('cobra', 'mark ii'), ('sidewinder', ...

  8. java源码 -- AbstractCollection抽象类

    简介  AbstractCollection是一个抽象类,它实现了Collection中除了iterator()和size()之外的所有方法.AbstractCollection的主要作用是方便其他类 ...

  9. Java Socket 的工作机制

    转载,请加上原文链接: 目录 socket 对象的创建时间 socket 通信可能会造成死锁 socket 对象的创建时间 这里需要一点TCP的知识, TCP状态分析请看 --> TCP转态转换 ...

  10. 20191011-构建我们公司自己的自动化接口测试框架-Util的getTestSuite模块

    getTestSuite主要是用于在testData里面获取测试集以及对应的测试数据,包括2个主要的方法,一个是获取测试集,一个是获取测试集里面要执行的测试用例 获取测试集方法: from Util. ...