實現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

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 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

  

 

  

  

 

 

  

 

 

 

 

 

 

 

  

  

  

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM