1. 程式人生 > 實用技巧 >Linux自學筆記——LAMP

Linux自學筆記——LAMP


LAMP

a:apache(httpd)

m:mysql,mariadb

p:php,perl,python

web資源型別:

靜態資源:原始形式與相應內容一致;

動態資源:原始形式通常為程式檔案,需要在伺服器端執行之後,將執行結果返回給客戶端;

客戶端技術:javascript

伺服器端技術:php,jsp

CGI:Common Gateway Interface

可以讓一個客戶端,從網頁瀏覽器向執行在網路伺服器上的程式傳輸資料;CGI描述了客戶端和伺服器程式之間傳輸的一種標準;

程式=指令+資料

資料模型:

層次模型

網狀模型

關係模型:表(行+列)

關係模型:IngreSQL,Oracle,Sybase,Infomix,DB2,SQL Server,MySQL,PostgreSQL,MariaDB

請求流程:

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

php:指令碼程式語言、嵌入到html中的嵌入式web程式開發語言;

基於zend編譯成opcode(二進位制格式的位元組碼,重複執行,可省略編譯環境)

關於PHP

1.PHP簡介

PHP是通用伺服器端的指令碼程式語言,其主要用於web開發以及實現動態web頁面,它也是最早實現將指令碼嵌入HTML原始碼文件中的伺服器端指令碼語言之一。同時,php還提供了一個命令列介面,因此,其也可以在大多數系統上作為一個獨立的shell來使用。

Rasmus Lerdorf於1994年開始開發PHP,它起初是一組被Ramus Lerdorf稱作“Personnal Home Page Tool”的Perl指令碼,這些指令碼可以用於顯示作者的簡歷並記錄使用者對其網站的訪問。後來,Ramus使用c語言將這些Perl指令碼重寫為CGI程式,還為其增加了執行web forms的能力以及與資料庫互動的特性,並將其重新命名為“personal home page/forms interpreter”或“PHP/FI”此時,PHP/FI已經可以用於開發簡單的動態web程式了,這即是PHP1.0.1995年6月,RasmusLerdorf把它的PHP釋出於comp.infosystems.www.authoring.cgiUsenet討論組,從此PHP開始走進人們的視野。1997年,其2.0版本釋出。

1997年,兩名以色列程式設計師ZeevSuraski和Andi Gutmans重寫的PHP的分析器(parser)成為PHP發展到3.0的基礎,而且從此將PHP重新命名為PHP: Hypertext Preprocessor。此後,這兩名程式設計師開始重寫整個PHP核心,並於1999年釋出了ZendEngine 1.0,這也意味著PHP 4.0的誕生。2004年7月,Zend Engine 2.0釋出,由此也將PHP帶入了PHP 5時代。PHP5包含了許多重要的新特性,如增強的面向物件程式設計的支援、支援PDO(PHP Data Objects)擴充套件機制以及一系列對PHP效能的改進。

2.PHP Zend Engine

Zend Engine是開源的、PHP指令碼語言的直譯器,它最早是由以色列理工學院(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人的名字的合稱,後來兩人聯合創立了Zend Technologies公司。

Zend Engine1.0於1999年隨PHP 4釋出,由C語言開發且經過高度優化,並能夠做為PHP的後端模組使用。Zend Engine為PHP提供了記憶體和資源管理的功能以及其它的一些標準服務,其高效能、可靠性和可擴充套件性在促進PHP成為一種流行的語言方面發揮了重要作用。

Zend Engine的出現將PHP程式碼的處理過程分成了兩個階段:首先是分析PHP程式碼並將其轉換為稱作Zend opcode的二進位制格式(類似Java的位元組碼),並將其儲存於記憶體中;第二階段是使用Zend Engine去執行這些轉換後的Opcode。

3.PHP的Opcode

Opcode是一種PHP指令碼編譯後的中間語言,就像Java的ByteCode,後者.NET的MSL。PHP執行PHP指令碼程式碼一般經過如下4個步驟(確切的說,應該是PHP的語言引擎Zend)

1)Scanning(Lexing) —— 將PHP程式碼轉換為語言片段(Tokens)

2)Parsing —— 將Tokens轉換成簡單而有意義的表示式

3)Compilation —— 將表示式編譯成Opocdes

4)Execution —— 順次執行Opcodes,每次一條,從而實現PHP指令碼的功能

4.PHP的加速器

基於PHP的特殊擴充套件機制如opcode快取擴充套件也可以將opcode快取與PHP的共享記憶體中,從而可以讓同一段程式碼的後續重複執行時跳過編譯階段以提高效能。由此也可以看出,這些加速器並非真正提高了opcode的執行速度,而僅是通過 分析opcode後並將它們重新排列以達到快速執行的目的。

常見的php加速器有:

1)APC(Alternative PHP Cache)

遵循PHP License的開源框架,PHP opcode快取加速器,目前的版本不適用於PHP5.4 。專案地址,http://pecl.php.net/package/APC

2)eAccelerator

源於Turck MMCache,早期的版本包含了一個PHPencoder和PHP loader,目前encoder已經不在支援。專案地址,http://eaccelerator.net/

3)XCache

快速而且穩定的PHP opcode快取,經過嚴格測試且被大量用於生產環境。專案地址,http://xcache.lighttpd.net/

4)Zend Optimizer和Zend Guard Loader

Zend Optimizer並非一個opcode加速器,它是由ZendTechnologies為PHP5.2及以前的版本提供的一個免費、閉源的PHP擴充套件,其能夠執行由Zend Guard生成的加密的PHP程式碼或模糊程式碼。 而Zend Guard Loader則是專為PHP5.3提供的類似於Zend Optimizer功能的擴充套件。專案地址,http://www.zend.com/en/products/guard/runtime-decoders

5)NuSphere PhpExpress

NuSphere的一款開源PHP加速器,它支援裝載通過NuSphere PHPEncoder編碼的PHP程式檔案,並能夠實現對常規PHP檔案的執行加速。專案地址,http://www.nusphere.com/products/phpexpress.htm

5.Php原始碼目錄結構

Php的原始碼在結構上非常的清晰。其程式碼根目錄中主要包含了一些說明檔案以及設計方案,並提供瞭如下子目錄:

1)Build ——顧名思義,這裡主要放置一些跟原始碼編譯相關的檔案,比如開始構建之前的buildconf指令碼及一些檢查環境的指令碼等。

2)ext ——官方的擴充套件目錄,包括了絕大多數PHP的函式的定義和實現,如array系列,pdo系列,spl系列等函式的實現。 個人開發的擴充套件在測試時也可以放到這個目錄,以方便測試等。

3)main ——這裡存放的就是PHP最為核心的檔案了,是實現PHP的基礎設施,這裡和Zend引擎不一樣,Zend引擎主要實現語言最核心的語言執行環境。

4)Zend —— Zend引擎的實現目錄,比如指令碼的詞法語法解析,opcode的執行以及擴充套件機制的實現等等。

5)pear —— PHP 擴充套件與應用倉庫,包含PEAR的核心檔案。

6)sapi ——包含了各種伺服器抽象層的程式碼,例如apache的mod_php,cgi,fastcgi以及fpm等等介面。

7)TSRM —— PHP的執行緒安全是構建在TSRM庫之上的,PHP實現中常見的*G巨集通常是對TSRM的封裝,TSRM(Thread Safe Resource Manager)執行緒安全資源管理器。

8)tests —— PHP的測試指令碼集合,包含PHP各項功能的測試檔案。

9)win32 ——這個目錄主要包括Windows平臺相關的一些實現,比如sokcet的實現在Windows下和*Nix平臺就不太一樣,同時也包括了Windows下編譯PHP相關的指令碼。

LAMP

httpd:接收使用者的web請求;靜態資源則直接響應;動態資源為php指令碼,對此類資源的請求將交由php來執行;

php:執行php程式;

MariaDB:資料管理系統;

Httpd與php結合的方式:

CGI

FastCGI

Modules(把php編譯稱為httpd的模組)

MPM

prefork:libphp5.so

event,worker:libphp5-zts.so

php:指令碼語言直譯器

配置檔案:/etc/php.ini,/etc/php.d/*.ini

配置檔案在php直譯器啟動時被讀取,因此,對配置檔案的修改如何生效?

Modules:重啟httpd服務;

FastCGI:重啟php-fpm服務;

ini

[foo]:Section Header

directive = value

f59ffbc3a6d7a495520fcbf9b2b6d188.png-wh_

註釋符:在較新的版本中,已經完全使用;進行註釋;

#:純粹的註釋資訊;

;:用於註釋可啟用的directive

php.ini的核心配置選項文件:http://php.net/manual/zh/ini.core.php

php.ini的配置選項列表:http://php.net/manual/zh/ini.list.php

php測試程式碼

<php?

phpinfo();

?>

php連線mysql的測試程式碼:

<?php

$conn =mysql_connect('172.16.100.67','testuser','testpass');

if ($conn)

echo "OK";

else

echo "Failure";

?>

安裝php及測試:

1.安裝php;

ff91ff43c7de5f614e8acb4de2fff49f.png-wh_

2.檢視生成的檔案列表;

5372551ccf239ea4a4f2a4e07cff2833.png-wh_

3.編輯檔案,提供一個php頁面,然後並啟動httpd服務;

daf319e91beb291bfc659b143ed11c3c.png-wh_

4.瀏覽器測試;

82e38863c0724b9525886a14362d2bca.png-wh_

安裝lamp:

Centos 6:httpd,php,mysql-server,php-mysql

#service httpd start

#service mysqld start

Centos 7:httpd,php,php-mysql,mariadb-server

#systemcel starthttpd.service

#systemctl start mariadb.service

演示:在centos7環境下。

1.安裝相應的軟體元件;

8a86ac2e9b53794d774f4733f7be14e7.png-wh_

2.啟動httpd服務和mariadb服務;

編輯mariadb配置檔案;

81c205567295d9eed3729c297942a912.png-wh_

啟動服務並檢視服務埠檢查是否啟動;

6f452be7f25140337c6f5501c8962351.png-wh_

可以使用mysql命令連線mysql伺服器上了;

c9b46bfcc2a8a591881344fc4a0a442e.png-wh_

3.首次安裝進行安全設定;

160fc70f5572df49132989955c584a4c.png-wh_

安全設定如下;

77d60348f3bdb1f866b445fb3c82414c.png-wh_

測試安全設定;(直接命令不能進入,需要輸入密碼才能進入)

b6af27951d9dee31f002b5e0bbbd095e.png-wh_

4.php連線mysql測試;(需要安裝驅動模組php-mysql,已安裝)

編輯檔案;

48d0558aa51c36c4401d31e2e94b64f0.png-wh_

瀏覽器訪問測試;

f651dd71dcacbf00bdcad24de589dab9.png-wh_

示例:部署lamp,以虛擬機器安裝WordPress,phpadmin,discuz;

1.基於lamp搭建wordpress;

1)首先搭建好lamp環境,上面已經搭建好。所以我們在上面的壞境下搭建wordpress;

2)在網上下載worepress包,解壓後並copy到/var/www/html目錄;

解壓:

93dea3d0b248cf34c903c8c63d84cfbc.png-wh_

複製:

0ab85101fba2f2d5c8cb53ccfb1754bc.png-wh_

3)在wp模板上更改編輯配置檔案,將wp-config-sample.php複製為wp-config.php;

961286d2d5d170e10c4e6f57830030be.png-wh_

4)Mysql配置;

以root許可權登入,建立wordpress的資料庫;

305eda26a82b90cf5f0eae9337afa1b7.png-wh_

建立並授權使用者;

b9ebe724a12cefa7560cd2e8d3591462.png-wh_

重新整理許可權,並檢視使用者授權是否成功;

6d692006785d4326e01acee67b73a19d.png-wh_

5)修改使用者組和許可權

34d53d3b57f257c25fe30279191baae6.png-wh_

6)啟動httpd服務,並重啟mariadb服務;

fe033df0ff3dfa09ed3d14ba4e184c00.png-wh_

7)瀏覽器訪問測試;

登入http://192.168.19.130/wordpress

fd7920bd6e651c06e9aa0db1993a3cb6.png-wh_

填寫相關資訊,安裝後進入wordpress介面;

688375d32a640a29cf26dafbb1963375.png-wh_

登入使用者後介面為如下;

7b07ae807d74ae49092bce13a5d1c732.png-wh_

2.基於lamp搭建phpadmin;

1)在以上的lamp環境進行搭建;

2)下載phpadmin壓縮包,解壓縮;之後copy到/var/www/html目錄;

f56d4b566428541737e7f22b7195e440.png-wh_

複製;

e749ecfb2c821fc19a25943c2fa8d6ff.png-wh_

因為名字太長,為了以後升級或回滾,做軟連線;

357570c927a478bda64d70197c974779.png-wh_

3)修改pma目錄下一個模板配置檔案;複製config.sample.inc.php為config.inc.php;

46c871cdbc9339f52df9a0053f79cc8f.png-wh_

生成隨機數密碼,複製到剛才的配置檔案中的位置;

0ebaa6814c6531b4e9acbdd628d6ecab.png-wh_

過載httpd服務;

4)瀏覽器測試;

ca03d24ab744c85f672bdcc5e29198b2.png-wh_

可以管理資料庫了;

ed70988f0c88ff77f34f67f840c0d320.png-wh_

5)剛剛使用的wpuser進入管理的,無許可權建立資料庫,所以要切換root賬號去,建立資料庫;

7b961fd7d3a2662826e75709abcc2ca4.png-wh_

新建資料庫;

1d55ee0dfde41df3523c7fe3a05c98aa.png-wh_

新建資料表;

949607674c30f4f024c656fcf7cdafa3.png-wh_

填入表內容;

49adf1f7f526b5dc9ed7c90fce76af46.png-wh_

大概的phpadmin配置就是這樣;

3.基於lamp配置Discuz;

1)下載Discuz程式包,基於上面的lamp環境下進行配置;

2)解壓程式包,並把解壓後的upload目錄移動複製到/var/www/html目錄下;

解壓:

29c64c6ef5ceea5bd88cf20aa7c9dc80.png-wh_

移動複製:

bfe1db1ce08dd9285ee858c213bb2ffa.png-wh_

3)瀏覽器訪問測試安裝;

a.瀏覽器訪問:

b479160c4206a823a281df6aa3c8b48a.png-wh_

b.點選“我同意”,會出現如下介面,此時我們需要修改許可權

37b55f161ca1b86fa946ab2e3117bcd8.png-wh_

c.修改相對應目錄許可權:

6034f5ce5594bce248d3f71f6713fb8b.png-wh_

d.重新重新整理頁面:

d8fe1429cf380c829b26cda99c350628.png-wh_

e.點選下一步;

52da65bb6dcda2c15c8687af50a26edd.png-wh_

f.下一步;

6c97a8040777245598b83a39e6361963.png-wh_

g.安裝資料庫介面;

16666ce35e1f56031bdc7acec3f8c05b.png-wh_

4)建立相關資料庫,並授權使用者;

建立資料庫bbsDB;

d275317fc6ea0e501db2c6c264ec164c.png-wh_

授權使用者;

7cb6bf716f7885dd39f83f726569cf22.png-wh_

5)返回瀏覽器繼續測試,以剛建立的資料庫,使用者名稱安裝;

3f96cfed4e262033ac63316ad312135e.png-wh_

6)進入論壇主介面;

0272def5773bfc652d5a5f216a9ca9c9.png-wh_


轉載於:https://blog.51cto.com/claude666/1982333