实现LAMP架构

此生再无相见时 提交于 2019-12-06 05:14:52

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 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

  

 

  

  

 

 

  

 

 

 

 

 

 

 

  

  

  

 

 

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!