php常用基礎 三

2021-09-23 15:35:46 字數 4542 閱讀 6052

fastcgi 和 php-fpm的區別

cgi連線webservice和php解析器的乙個協議

fastcgi是cgi的改良版本

php-fpm程序管理器

fastcgi  web和php通訊的協議   通過fpm來完成

php-fpm fastcgi的程序管理器 master worker程序來處理請求

2.不斷在檔案 hello.txt 頭部寫入一行 "hello world"字串, 要求**完整

//開啟檔案

//將檔案的內容讀取出來,在開頭加入hello world

//將拼接好的字串回到檔案當中

$file = "./hello.txt";

$handle = fopen($file, 'r');

$content = fread($handle, filesize($file));

$content = 'hello world'.$content;

fclose($handle); //關閉

$handle = fopen($file, 'w'); //重新 開啟

fwrite($handle, $content);

fclose($handle);

3.通過php函式的方式對目錄進行遍歷,寫出程式

$dir = "./test";

//開啟目錄

//讀取目錄當中的檔案

//如果檔案型別是目錄 繼續開啟目錄

//讀取子目錄的檔案

//如果檔案型別是檔案 輸出檔名稱

//關閉目錄

function loopdir($dir) }}

}loopdir($dir);

4.單一入口的工作原理

工作原理:

用乙個處理程式檔案處理所有的http請求,根據請求時的引數的不同區分不同模組和操作的請求

單一入口的工作原理:

優勢:可以進行統一的安全檢查

集中處理程式

劣勢:url不美觀(url重寫)

處理效率會稍低

5.nginx負載均衡

內建策略, 擴充套件策略

內建策略: ip hash , 加權輪詢

擴充套件策略: fair策略, 通用hash, 一致性hash

加權輪詢策略:

首先將請求都分給高權重的機器,直到該機器的權值降到了比其他機器低,才開始將請求分給下乙個高權重的機器

當所有後端機器都down掉時,nginx會立即將所有機器的標誌位清成初始狀態,以避免造成所有的機器都處在timeout的狀態

ip hash策略:

nginx內建的另一種負載均衡的策略,流程和輪詢很類似,只是其中的演算法和具體的策略有些變化 ip

hash演算法sh是一種變相的輪詢演算法

fair策略:

根據後端伺服器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流

通用hash, 一致性hash策略

通用hash比較簡單,可以以nginx內建的變數為key進行hash,一致性hash採用了nginx內建的一致性hash環,支援memcache

5.mysql引擎

innodb表引擎

預設事物引擎,最重要最廣泛的儲存引擎,效能非常優秀 資料儲存在共享表空間

可以通過配置分開對主鍵查詢的效能高於其他型別的儲存引擎內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash索引,插入資料時自動構建插入緩衝區

innodb表引擎

通過一些機制和工具支援真正的熱備份

支援奔潰後的安全恢復

支援行級鎖

支援外來鍵

myisam表引擎

5.1版本前,myisam是預設的儲存引擎

擁有全文索引,壓縮,空間函式

不支援事物和行級鎖,不支援奔潰後的安全恢復

表儲存在兩個檔案, myd和myi

設計簡單, 某些場景下效能很好

6.索引

索引的基礎:

索引類似於書籍的目錄,要想找到一本書的某個特定主題,需要先找書的目錄,定位對應的頁碼

儲存引擎使用類似的方式進行資料查詢,先去索引當中找到對應的值,然後根據匹配的索引找到對應的資料行

索引對效能的影響:

大大減少伺服器需要掃瞄的資料量

幫助伺服器避免排序和臨時表

將隨機i/o變順序i/o

大大提高查詢速度,降低寫的速度,占用磁碟

索引的使用場景:

對於非常小的表,大部分情況下全表掃瞄效率更高

中到大型表,索引非常有效

特大型的表,建立的使用索引的代價將隨之增長,可以使用分割槽技術來解決

索引的型別:

索引有很多態別,都是實現在儲存引擎層的

普通索引:最基本的索引,沒有任何約束限制

唯一索引:與普通索引類似,但是具有唯一性約束

主鍵索引: 特殊的唯一索引,不允許有空值

索引的型別:

組合索引: 將多個列組合在一起建立索引,可以覆蓋多個列

外來鍵索引: 只有innodb型別的表才可以使用外來鍵索引,保證資料的一致性,完整性和實現級聯操作

全文索引: mysql自帶的全文索引只能用於myisam,並且只能對英文進行全文索引

原則:

1.最適合索引的列是出現在where子句中的列,或連線子句中的列而不是出現在select關鍵字後的列

2.索引列的基數越大,索引的效果越好

3.對字串進行索引,應該制訂乙個字首長度,可以節省大量的索引空間

4.根據情況建立復合索引,復合索引可以提高查詢效率

5.避免建立過多索引,索引會額外占用磁碟空間,降低寫操作效率

6.主鍵盡可能選擇較短的資料型別,可以有效較少索引的磁碟占用提高查詢效率

注意:

1.復合索引遵循字首原則

key(a, b, c)

where a=1 and b=2 and c=3

where a=1 and b =2

where a=1

where b=2 and c=3

where a=1 and c=3

注意:1.復合索引遵循字首原則

2.like查詢,%不能在前,可以使用全文索引

where name like "%wang%"

3.column is null可以使用索引

4.如果mysql估計使用索引比全表掃瞄更慢,會放棄使用索引

5.如果or前的條件中的列有索引,後面的沒有,索引都不被用到

6.列型別是字串,查詢時一定要給值加引號,否則索引失效

如: name varchar(16) "100" where name = 100

那麼name上的索引就會失效

mysql主從複製工作原理

在主庫上把資料更改記錄到二進位制日誌

從庫將主庫的日誌複製到自己的中繼日誌

從庫讀取中繼日誌中的事件,將其重放到從庫資料中

mysql主從複製解決的問題

資料分布:隨意停止或開始複製,並在不同地理位置分布資料備份

負載均衡:降低單個伺服器的壓力

高可用和故障切換:幫助應用程式避免單點失敗

公升級測試:可以使用更高版本的mysql作為從庫

8.mysql安全的處理

1.定期做資料備份

2.不給查詢使用者root許可權,合理分配許可權

3.關閉遠端訪問資料庫許可權

4.修改root口令,不用預設口令,使用較複雜的口令

5.刪除多餘的使用者

6.改變root使用者的名稱

7.限制一般使用者瀏覽其他庫

8.限制使用者對資料檔案的訪問許可權

防止sql注入:

1.使用預處理語句防sql注入

2.寫入資料庫的資料要進行特殊字元的轉義

3.查詢錯誤資訊不要返回給使用者,將錯誤記錄到日誌

注意: php端盡量使用pdo對資料庫進行相關操作,pdo擁有對預處理語句很好的支援的方法, mysqli也有,

但是可擴充套件性不如pdo, 效率略高於pdo,mysql函式在新版本中已經趨向於淘汰,所以不建議使用,而且它沒有很好的支援預處理的方法

PHP基礎入門(三)

php中的算術運算子 注意 對於 要注意的地方 echo 24 5 echo echo 24 5 執行結果 4 4 php中的賦值運算子 php的賦值運算子有兩種,分別是 1 把右邊表示式的值賦給左邊的運算數。它將右邊表示式值複製乙份,交給左邊的運算數。換而言之,首先給左邊的運算數申請了一塊記憶體,...

PHP基礎(三)函式

php中函式名不區分大小寫。函式 function 函式定義語法 函式的幾個對應的關鍵點 function,關鍵字 函式名 引數 形參和實參 函式體和返回值。基本語法 function 函式名 引數 函式體 返回值 return 結果 定義函式的目的 是為了實現 的重複利用。乙個功能乙個函式 簡單明...

PHP基礎 PHP其他常用函式

isset 檢測變數是否存在 不是null即返回true 不可用於函式檢測 empty 判斷變數是否為空 empty判斷0為空值,即true unset 釋放變數。釋放以後該變數無法再被呼叫。同時也可以用於刪除陣列中的元素。函式 描述php connection aborted 檢查是否斷開客戶機。...