linux進階-瞭解LAMP架構基礎

LAMP介紹

LAMP的含義:

  • L: linux
  • A: apache httpd
  • M: mysql, mariadb
  • P: php, python

Web資源類型

  • 靜態資源:原始形式與響應內容一致
  • 動態資源:原始形式通常爲程序文件,需要在服務器端執行之後,將執行結果返回給客戶端

LAMP工作原理

在這裏插入圖片描述

  • 當客戶端請求靜態資源時,web服務器直接把靜態資源返回客戶端
  • 當客戶端請求動態資源時,httpd的php模塊會進行動態運算,如果過程需要數據庫的數據作爲運算參數時,php連接數據庫取得相應數據,運算的結果轉換爲靜態資源由web服務器返回客戶端
  • CGI(Common Gateway Interface):httpd程序與php之間數據傳輸的標準

php

  • php是一種腳本編程語言,同時也是一種可以嵌入到html中的嵌入式web程序語言

  • Zend Engine:開源的、php腳本語言的解釋器

  • Opcode:php腳本編譯後的中間語言,順次執行opcode,每次執行一條,實現php腳本的解釋執行

cgi和fastcgi

cgi

  • CGI:Common Gateway Interface 公共網關接口
  • CGI 可以讓一個客戶端,從網頁瀏覽器通過http服務器向執行在網絡服務器上的程序傳輸數據;
  • CGI描述了客戶端和服務器程序之間傳輸的一種標準
    請求流程:
  • Client – (http協議) --> httpd – (cgi協議) --> application server (program file) – (mysql協議) --> mysql

fastcgi

  • web服務器收到一個請求時,不會重新fork一個進程(因爲這個進程在web服務器啓動時就開啓了,而且不會退出),web服務器直接把內容傳遞給這個進程(進程間通信,但fastcgi使用了別的方式,tcp方式通信),
  • 這個進程收到請求後進行處理,把結果返回給web服務器,最後自己接着等待下一個請求的到來,而不是退出
    請求流程:
  • Client – (http協議) --> httpd – (fastcgi協議) --> fastcgi服務器 – (mysql協議) --> mysql

cgi和hastcgi區別

在這裏插入圖片描述

在這裏插入圖片描述

PHP

什麼是PHP?

  • PHP原始爲Personal Home Page的縮寫,已經正式更名爲 “PHP: Hypertext Preprocessor”。自20世紀90年代國內互聯網開始發展到現在,互聯網信息幾乎覆蓋了我們日常活動所有知識範疇,並逐漸成爲我們生活、學習、工作中必不可少的一部分。據統計,從2003 年開始,我國的網頁規模基本保持了翻番的增長速度,並且呈上升趨勢。PHP 語言作爲當今最熱門的網站程序開發語言,它具有成本低、速度快、可移植性好、 內置豐富的函數庫等優點,因此被越來越多的企業應用於網站開發中。但隨着互聯網的不斷更新換代,PHP語言也出現了不少問題。
  • 根據動態網站要求,PHP語言作爲一種語言程序,其專用性逐漸在應用過程中顯現,其技術水平的優劣與否將直接影響網站的運行效率。其特點是具有公開的源代碼, 在程序設計上與通用型語言,如C語言相似性較高,因此在操作過程中簡單易懂,可操作性強。同時,PHP語言具有較高的數據傳送處理水平和輸出水平,可以廣泛應用在Windows系統及各類Web服務器中。如果數據量較大,PHP語言還可以拓寬鏈接面,與各種數據庫相連,緩解數據存儲、檢索及維護壓力。隨着技術的發展,PHP 語言搜索引擎還可以量體裁衣,實行個性化服務,如根據客戶的喜好進行分類收集儲存,極大提高了數據運行效率。

PHP的opcode語言

  • Opcode是一種PHP腳本編譯後的中間語言,類似於Java的ByteCode,或者.NET的MSL。
  • PHP的語言引擎Zend執行PHP腳本代碼一般會經過如下4個步驟
    • 1、Scanning 詞法分析,將PHP代碼轉換爲語言片段(Tokens)
    • 2、Parsing 語義分析,將Tokens轉換成簡單而有意義的表達式
    • 3、Compilation 將表達式編譯成Opcode
    • 4、Execution 順次執行Opcode,每次一條,從而實現PHP腳本的功能

即:掃描–>分析–>編譯–>執行

PHP配置

  • php 的配置文件:/etc/php.ini
  • /etc/php.d/*.ini 配置文件在php解釋器啓動時被讀取
  • 對配置文件的修改生效方法
    • Modules:重啓httpd服務
    • FastCGI:重啓php-fpm服務

/etc/php.ini配置文件

[foo]:Section Header
directive = value

註釋符:
- 以#開頭,純粹的註釋信息
- 以 ; 開頭,用於註釋可啓用的directive
- 提示:較新的版本中,已經完全使用 “ ; ” 進行註釋

php.ini配置參考文檔
php.ini的核心配置選項文檔: http://php.net/manual/zh/ini.core.php
php.ini配置選項列表:http://php.net/manual/zh/ini.list.php

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 開啓短標籤,如:

php語言格式

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();
?>

LAMP實現方法

  • httpd 接收用戶的web請求;靜態資源則直接響應;動態資源爲php腳本,對此類資源的請求將交由
    php來運行
  • httpd與php結合的方式
    • modules :將php編譯成爲httpd的模塊libphp5.so,只有prefork 模式才支持
    • FastCGI
      LAMP架構實現
      靜態資源:
    • Client – http --> httpd
      動態資源:
  • Client – http --> httpd --> libphp5.so () – mysql --> MySQL server Client – http --> httpd -->fastcgi-- mysql --> MySQL server

實現LAMP

利用rpm包實現LAMP安裝部署

centos 8
Module方式

dnf install httpd mariadb-server php php-mysqlnd

FastCGI方式

dnf install httpd mariadb-server php-fpm php-mysqlnd

centos 7
Module方式

yum install httpd php php-mysql mariadb-server

FastCGI方式

yum install httpd php-fpm php-mysql mariadb-server

centos 6
Module方式

yum install httpd, php, php-mysql, mysql-server

FastCGI方式:默認不支持


注意:基於module實現,httpd 需要 使用prefork模型

PHP連接MySQL的方式

使用mysql擴展連接數據庫

使用mysql擴展模塊mysql.so連接數據,此方式已經在php 7版後淘汰
範例:php使用mysql擴展連接數據庫的測試代碼

<?php
$conn = mysql_connect('mysqlserver','username','password');
if ($conn)
echo "OK";
else
echo "Failure";
#echo mysql_error();
mysql_close();
?>

使用mysqli擴展連接數據庫

使用mysqli擴展模塊mysqli.so連接數據,此方式只能連接MySQL數據庫,不支持其它數據庫
範例:php使用mysqli擴展連接數據庫的測試代碼

<?php
$mysqli=new mysqli("mysqlserver", "username", "password");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>

使用PDO(PHP Data Object)擴展連接數據庫

使用PDO擴展模塊pdo_mysql.so連接數據庫,此方式可以支持連接MySQL,Oracle等多種數據庫
範例:php使用pdo擴展連接數據庫的測試代碼1

<?php
$dsn='mysql:host=mysqlhost;dbname=test';   #注意主機地址
$username='root';
$passwd='magedu';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>

範例:php使用pdo擴展連接數據庫的測試代碼2

<?php
try {
$user='root';
$pass='magedu';
$dbh = new PDO('mysql:host=mysqlhost;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();
}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章