1. 程式人生 > >Linux自學筆記——LAMP

Linux自學筆記——LAMP

linux wordpress discuz phpadmin mysql maridb php


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

技術分享

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

#:純粹的註釋信息;

;:用於註釋可啟用的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;

技術分享

2. 查看生成的文件列表;

技術分享

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

技術分享

4. 瀏覽器測試;

技術分享

安裝lamp:

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

#service httpd start

#service mysqld start

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

#systemcel start httpd.service

#systemctl start mariadb.service

演示:在centos7環境下。

1. 安裝相應的軟件組件;

技術分享

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

編輯mariadb配置文件;

技術分享

啟動服務並查看服務端口檢查是否啟動;

技術分享

可以使用mysql命令連接mysql服務器上了;

技術分享

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

技術分享

安全設定如下;

技術分享

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

技術分享

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

編輯文件;

技術分享

瀏覽器訪問測試;

技術分享

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

1. 基於lamp搭建wordpress;

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

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

解壓:

技術分享

復制:

技術分享

3) 在wp模板上更改編輯配置文件,將wp-config-sample.php復制為wp-config.php;

技術分享

4) Mysql配置;

以root權限登錄,創建wordpress的數據庫;

技術分享

創建並授權用戶;

技術分享

刷新權限,並查看用戶授權是否成功;

技術分享

5) 修改用戶組和權限

技術分享

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

技術分享

7) 瀏覽器訪問測試;

登錄http://192.168.19.130/wordpress

技術分享

填寫相關信息,安裝後進入wordpress界面;

技術分享

登錄用戶後界面為如下;

技術分享

2. 基於lamp搭建phpadmin;

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

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

技術分享

復制;

技術分享

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

技術分享

3) 修改pma目錄下一個模板配置文件;復制config.sample.inc.php為config.inc.php;

技術分享

生成隨機數密碼,復制到剛才的配置文件中的位置;

技術分享

重載httpd服務;

4) 瀏覽器測試;

技術分享

可以管理數據庫了;

技術分享

5) 剛剛使用的wpuser進入管理的,無權限創建數據庫,所以要切換root賬號去,創建數據庫;

技術分享

新建數據庫;

技術分享

新建數據表;

技術分享

填入表內容;

技術分享

大概的phpadmin配置就是這樣;

3. 基於lamp配置Discuz;

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

2) 解壓程序包,並把解壓後的upload目錄移動復制到/var/www/html目錄下;

解壓:

技術分享

移動復制:

技術分享

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

a. 瀏覽器訪問:

技術分享

b. 點擊“我同意”,會出現如下界面,此時我們需要修改權限

技術分享

c. 修改相對應目錄權限:

技術分享

d. 重新刷新頁面:

技術分享

e. 點擊下一步;

技術分享

f. 下一步;

技術分享

g. 安裝數據庫界面;

技術分享

4) 創建相關數據庫,並授權用戶;

創建數據庫bbsDB;

技術分享

授權用戶;

技術分享

5) 返回瀏覽器繼續測試,以剛創建的數據庫,用戶名安裝;

技術分享

6) 進入論壇主界面;

技術分享


Linux自學筆記——LAMP