A. php做優化包括哪些內容
1:單引號代替雙引號,雙引號會去找變數。
2:方法定義為static,性能提升4倍。
3:$arr['id']的性能是$arr[id]的7倍。
4:echo性能快,盡量使用echo $a,$b,$c而非echo $a.$b.$c。
5:循環之前確定循環次數,盡量用foreach。
6:注銷不使用的變數,節省內存。
7:盡量不使用魔法函數:__get、__set等。
8:require_once()會檢查是否載入,消耗內存。
9:include文件時使用絕對路徑,省去查找的時間。
10:腳本開始執行時間$_SERVER[『REQUEST_TIME』]要好於time()。
11:正則效率低,用函數代替。
12:str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。
13:接收客串的效率比接收數組的效率高。
14:switch case好於多個if else。
15:用@屏蔽錯誤消息的方法很低效。
16:打開apache的mod_deflate模塊,可以提高網頁的瀏覽速度。
17:資料庫連接當使用完畢時應關掉,不要用長連接。
18:錯誤消息代價昂貴。
19:在方法中遞增局部變數,速度是最快的。幾乎與在函數中調用局部變數的速度相當。
20:遞增一個全局變數要比遞增一個局部變數慢2倍。
21:遞增一個對象屬性(如:$this->prop++)要比遞增一個局部變數慢3倍。
22:遞增一個未預定義的局部變數要比遞增一個預定義的局部變數慢9至10倍。
23:僅定義一個局部變數而沒在函數中調用它,同樣會減慢速度(其程度相當於遞增一個局部變數)。PHP大概會檢查看是否存在全局變數。
24:方法調用看來與類中定義的方法的數量無關,因為我(在測試方法之前和之後都)添加了10個方法,但性能上沒有變化。
25:派生類中的方法運行起來要快於在基類中定義的同樣的方法。
26:調用帶有一個參數的空函數,其花費的時間相當於執行7至8次的局部變數遞增操作。類似的方法調用所花費的時間接近於15次的局部變數遞增操作。
27:Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。盡量多用靜態HTML頁面,少用腳本。
28:盡量做緩存,可使用memcached。memcached是一款高性能的內存對象緩存系統,可用來加速動態Web應用程序,減輕資料庫負載。對運算碼 (OP code)的緩存很有用,使得腳本不必為每個請求做重新編譯。
29:當操作字元串並需要檢驗其長度是否滿足某種要求時,你想當然地會使用strlen()函數。此函數執行起來相當快,因為它不做任何計算,只返回在zval 結構(C的內置數據結構,用於存儲PHP變數)中存儲的已知字元串長度。但是,由於strlen()是函數,多多少少會有些慢,因為函數調用會經過諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫)、哈希查找,會跟隨被調用的函數一起執行。在某些情況下,你可以使用isset() 技巧加速執行你的代碼。
30:當執行變數$i的遞增或遞減時,$i++會比++$i慢一些。這種差異是PHP特有的,並不適用於其他語言,所以請不要修改你的C或Java代碼並指望它們能立即變快,沒用的。++$i更快是因為它只需要3條指令(opcodes),$i++則需要4條指令。後置遞增實際上會產生一個臨時變數,這個臨時變數隨後被遞增。而前置遞增直接在原值上遞增。這是最優化處理的一種,正如Zend的PHP優化器所作的那樣。牢記這個優化處理不失為一個好主意,因為並不是所有的指令優化器都會做同樣的優化處理,並且存在大量沒有裝配指令優化器的互聯網服務提供商(ISPs)和伺服器。
31:並不是事必面向對象(OOP),面向對象往往開銷很大,每個方法和對象調用都會消耗很多內存。
32:盡量採用大量的PHP內置函數。
33:如果在代碼中存在大量耗時的函數,你可以考慮用C擴展的方式實現它們。
34:mod_zip可作為Apache模塊,用來即時壓縮你的數據,並可讓數據傳輸量降低80%。
35:在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情況下,盡量用 file_get_contents,因為他的效率高得多!但是要注意file_get_contents在打開一個URL文件時候的PHP版本問題。
36:盡量的少進行文件操作,雖然PHP的文件操作效率也不低的。
37:優化Select SQL語句,在可能的情況下盡量少的進行Insert、Update操作(在update上,我被惡批過)。
38:循環內部不要聲明變數,尤其是大變數:對象。
39:多維數組盡量不要循環嵌套賦值。
40:在可以用PHP內部字元串操作函數的情況下,不要用正則表達式。
41:foreach效率更高,盡量用foreach代替while和for循環。
42:用i+=1代替i=i+1。符合c/c++的習慣,效率還高。
43:對global變數,應該用完就unset()掉。
B. 滲透測試——命令執行漏洞(RCE)詳解
命令執行漏洞(RCE)是信息安全領域中一種重要的攻擊手段,它允許攻擊者通過執行不受控制的命令來影響系統或應用的行為。本文旨在深入解析命令執行漏洞的形成原因、利用條件及防範措施。
1. 形成原因:應用中經常需要調用能夠執行系統命令的函數,如 PHP 中的 system、exec、shell_exec 等。當開發者未能嚴格過濾用戶控制的參數時,惡意命令可通過拼接正常命令注入,進而導致命令執行攻擊。
2. 漏洞分類:
要利用命令執行漏洞,需滿足以下條件:
繞過能力的評判取決於攻擊者的技術水平,繞過方式將在後續章節中介紹。
1. 利用系統函數實現命令執行的函數:如 eval、assert、preg_replace、call_user_func 等,如果對用戶輸入未嚴格過濾,可能引發遠程命令執行。
2. 直接執行系統命令的代碼函數:system、exec、shell_exec、passthru 等,需注意參數安全。
命令執行漏洞的關鍵在於命令拼接,惡意命令通常拼接在正常命令後,掌握拼接符號是基礎。以下是常用符號及示例:
1. 通配符:如使用通配符替代命令中的關鍵字元,可繞過部分安全限制。
2. 連接符:如使用引號、反斜杠等來規避安全檢查。
3. 未初始化變數:利用未初始化的變數值為 null,插入命令末尾,繞過黑名單檢測。
命令執行漏洞最常出現在 CMS 框架、插件及應用的其他關鍵位置,這些地方往往需要執行系統命令。
1. 升級框架、插件等至最新版本,打上安全補丁。
2. 關注行業動態,及時修復漏洞。
3. 減少框架/CMS 的使用。
4. 過濾危險符號,減少風險。
5. 安全配置 PHP 相關參數,禁用執行命令的函數。
6. 升級中間件。
7. 嚴格控制傳入變數,避免使用危險的魔法函數。
通過上述方法,開發者可有效防範命令執行漏洞,提升系統安全性。
C. php SESSION用法 $_SESSION['']初始值
注意,在使用session之前一定要調用
<?php
session_start();
開始會話,否則會出錯。在你的代碼里我看不到。
$_SESSION數組的使用類似於普通數組。但它是有」魔法「的。當頁面結束後,$_SESSION的內容會被PHP解析器自動保存下來,同時在用戶的瀏覽器留下一個cookie。下次用戶訪問時,使用該cookie繼續會話。
所以,檢查一個session是否存在和普通數組一樣:
<?php
//正確,檢查flag下標是否設置
if(isset($_SESSION['flag']))...
//錯誤,會導致警告,下標不存在
if($_SESSION['flag'])...
//存儲一個session值
$_SESSION['flag']=1;
//刪除一個session值
unset($_SESSION['flag']);
一個沒有設置的session是沒有初始值的。就像你初始化一個空數組一樣。
D. PHP中$_get與$get 區別
你是想問$_GET和$_get及$get嗎??
$_GET是php內置的一個全局變數,全局可用,也就是說在函數內部和外部都可以用,不受作用域限制,實際是它裡面存的是個數組,一般用來獲取url中query的相應的值。
$_get 和 $get 都是一般的普通變數,沒有什麼明顯的區別,只能說他們是不同的變數。