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