PHP知識總結(jié)【優(yōu)化,性能,長連接】

1. php 的垃圾回收機制

PHP 可以自動進行內(nèi)存管理,清除不需要的對象。

PHP 使用了引用計數(shù) (reference counting) GC 機制。

每個對象都內(nèi)含一個引用計數(shù)器 refcount,每個 reference 連接到對象,計數(shù)器加 1。當 reference 離開生存空間或被設(shè)為 NULL,計數(shù)器減 1。當某個對象的引用計數(shù)器為零時,PHP 知道你將不再需要使用這個對象,釋放其所占的內(nèi)存空間。

參考 http://www.php.net/manual/zh/features.gc.refcounting-basics.php

2. session 與 cookie 的區(qū)別和聯(lián)系

區(qū)別:

1. 存放位置:Session 保存在服務(wù)器,Cookie 保存在客戶端。

2. 存放的形式:Session 是以對象的形式保存在服務(wù)器,Cookie 以字符串的形式保存在客戶端。

3. 用途:Cookies 適合做保存用戶的個人設(shè)置,愛好等,Session 適合做客戶的身份驗證

4. 路徑:Session 不能區(qū)分路徑,同一個用戶在訪問一個網(wǎng)站期間,所有的 Session 在任何一個地方都可以訪問到。而 Cookie 中如果設(shè)置了路徑參數(shù),那么同一個網(wǎng)站中不同路徑下的 Cookie 互相是訪問不到的。

5. 安全性:Cookie 不是很安全,別人可以分析存放在本地的 COOKIE 并進行 COOKIE 欺騙,考慮到安全應(yīng)當使用 session

6. 大小以及數(shù)量限制:每個域名所煲含的 cookie 數(shù):IE7/8,FireFox:50 個,Opera30 個; Cookie 總大?。篎irefox 和 Safari 允許 cookie 多達 4097 個字節(jié),Opera 允許 cookie 多達 4096 個字 節(jié),InternetExplorer 允許 cookie 多達 4095 個字節(jié);一般認為 Session 沒有大小和數(shù)量限制。

關(guān)系:

  1. Session 需要借助 Cookie 才能正常工作。如果客戶端完全禁止 Cookie,Session 將失效!因為 Session 是由應(yīng)用服務(wù)器維持的一個 服務(wù)器端的存儲空間,用戶在連接服務(wù)器時,會由服務(wù)器生成一個唯一的 SessionID, 用該 SessionID 為標識符來存取服務(wù)器端的 Session 存儲空間。而 SessionID 這一數(shù)據(jù)則是保存到客戶端,用 Cookie 保存的,用戶提交頁面時,會將這一 SessionID 提交到服務(wù)器端,來存取 Session 數(shù)據(jù)。這一過程,是不用開發(fā)人員干預(yù)的。所以一旦客戶端禁用 Cookie,那么 Session 也會失效。

3. 如何修改 SESSION 的生存時間

  1. 設(shè)置瀏覽器保存的 sessionid 失效時間 setcookie (session_name (), session_id (), time () + $lifeTime, "/");

  2. 可以使用 SESSION 自帶的 session_set_cookie_params (86400); 來設(shè)置 Session 的生存期

  3. 通過修改 php.ini 中的 session.gc_maxlifetime 參數(shù)的值就可以改變 session 的生存時間

4. PHP 頁面重定向的方法有哪些

  1. header('Location: http://www.baidu.com/') ;

  2. echo '';

3 echo '';

5. PDO、adoDB、PHPLib 數(shù)據(jù)庫抽象層比較

PHP 數(shù)據(jù)庫抽象層就是指,封裝了數(shù)據(jù)庫底層操作的介于 PHP 邏輯程序代碼和數(shù)據(jù)庫之間的中間件。

PDO 以 PHP 5.1 為基礎(chǔ)進行設(shè)計,它使用 C 語言做底層開發(fā),設(shè)計沿承 PHP 的特點,以簡潔易用為準,從嚴格意義上講,PDO 應(yīng)該歸為 PHP 5 的 SPL 庫之一,而不應(yīng)該歸于數(shù)據(jù)抽象層,因為其本身和 MySQL 和 MySQLi 擴展庫的功能類似。PDO 是不適合用在打算或者有可能會變更數(shù)據(jù)庫的系 統(tǒng)中的。

ADODB 不管后端數(shù)據(jù)庫如何,存取數(shù)據(jù)庫的方式都是一致的;

轉(zhuǎn)移數(shù)據(jù)庫平臺時,程序代碼也不必做太大的更動,事實上只需要改動數(shù)據(jù)庫配置文 件。提供了大量的拼裝方法,目的就是針對不同的數(shù)據(jù)庫在抽象層的底層對這些語句進行針對性的翻譯,以適應(yīng)不同的數(shù)據(jù)庫方言!但是這個抽象層似乎體積過于龐 大了,全部文件大概有 500K 左右,如果你做一個很小的網(wǎng)站的話,用這個似乎大材小用了

PHPLib 可能是伴隨 PHP 一同成長最老的數(shù)據(jù)庫抽象層(但和 ADODB 相比,它只算是一個 MySQL 抽象類庫),這個抽象類使用方法相當簡單,體積小,是小型網(wǎng)站開發(fā)不錯的選擇。

PDO 提供預(yù)處理語句查詢、錯誤異常處理、靈活取得查詢結(jié)果(返回數(shù)組、字符串、對象、回調(diào)函數(shù))、字符過濾防止 SQL 攻擊、事務(wù)處理、存儲過程。

ADODB 支持 緩存查詢、移動記錄集、(HTML、分頁、選擇菜單生成)、事務(wù)處理、輸出到文件。 參考 http://apps.hi.baidu.com/share/detail/463678

6. 長連接、短連接的區(qū)別和使用

長連接:client 方與 server 方先建立連接,連接建立后不斷開,然后再進行報文發(fā)送和接收。這種方式下由于通訊連接一直存在。此種方式常用于 P2P 通信。

短連接:Client 方與 server 每進行一次報文收發(fā)交易時才進行通訊連接,交易完畢后立即斷開連接。此方式常用于一點對多點通訊。C/S 通信。

長連接與短連接的使用時機:

長連接:

短連接多用于操作頻繁,點對點的通訊,而且連接數(shù)不能太多的情況。每個 TCP 連 接的建立都需要三次握手,每個 TCP 連接的斷開要四次握手。如果每次操作都要建立連接然后再操作的話處理速度會降低,所以每次操作下次操作時直接發(fā)送數(shù)據(jù) 就可以了,不用再建立 TCP 連接。例如:數(shù)據(jù)庫的連接用長連接,如果用短連接頻繁的通信會造成 socket 錯誤,頻繁的 socket 創(chuàng)建也是對資源的浪 費。

短連接:

web 網(wǎng)站的 http 服務(wù)一般都用短連接。因為長連接對于服務(wù)器來說要耗費一定 的資源。像 web 網(wǎng)站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源。試想如果都用長連接,而且同時用成千上萬的用戶,每個用戶都占有一個 連接的話,可想而知服務(wù)器的壓力有多大。所以并發(fā)量大,但是每個用戶又不需頻繁操作的情況下需要短連接。

參考 http://www.cnblogs.com/Roberts/archive/2010/12/05/1986550.html

7. HTTP 協(xié)議詳解、應(yīng)用

http(超文本傳輸協(xié)議)是一個基于請求與響應(yīng)模式的、無狀態(tài)的、短連接、靈活、應(yīng)用層的協(xié)議,?;?TCP 的連接方式。

參考 http://blog.csdn.net/gueter/article/details/1524447 (http 協(xié)議詳解)

(HTTP 響應(yīng)狀態(tài)碼)

HTTP 響應(yīng)狀態(tài)碼

狀態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應(yīng)的類別,且有五種可能取值:

1xx:指示信息 -- 表示請求已接收,繼續(xù)處理

2xx:成功 -- 表示請求已被成功接收、理解、接受

3xx:重定向 -- 要完成請求必須進行更進一步的操作

4xx:客戶端錯誤 -- 請求有語法錯誤或請求無法實現(xiàn)

5xx:服務(wù)器端錯誤 -- 服務(wù)器未能實現(xiàn)合法的請求

常見狀態(tài)代碼、狀態(tài)描述、說明:

200 OK // 客戶端請求成功

400 Bad Request // 客戶端請求有語法錯誤,不能被服務(wù)器所理解

401 Unauthorized // 請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和 WWW-Authenticate 報頭域一起使用 403 Forbidden // 服務(wù)器收到請求,但是拒絕提供服務(wù)

404 Not Found // 請求資源不存在,eg:輸入了錯誤的 URL

500 Internal Server Error // 服務(wù)器發(fā)生不可預(yù)期的錯誤

503 Server Unavailable // 服務(wù)器超時 // 可能恢復(fù)正常

304 Not Modifed // 自從上次請求后,請求的網(wǎng)頁未修改過。

// 服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容。

8. 異構(gòu)系統(tǒng)通訊中的通訊加密方案

參考 http://blog.csdn.net/linvo/article/details/5741942

9. socket 連接步驟

Socket(套接字)概念

套接字(socket)是通信的基石,是支持 TCP/IP 協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點的抽象表示,煲含進行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機的 IP 地址,本地進程的協(xié)議端口,遠地主機的 IP 地址,遠地進程的協(xié)議端口。

Socket 連接過程

建立 Socket 連接至少需要一對套接字,其中一個運行于客戶端,稱為 ClientSocket ,另一個運行于服務(wù)器端,稱為 ServerSocket

套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認。

服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。

客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。

連接確認:是指當服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端

套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。

10. TCP 協(xié)議,三次握手、四次揮手

TCP 協(xié)議 (Transmission Control Protocol) 是主機對主機層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認建立一個連接,四次揮手斷開連接。

位碼即 tcp 標志位,有 6 種標示:

SYN (synchronous 建立聯(lián)機) 同步

ACK (acknowledgement 確認)

PSH (push 傳送)

FIN (finish 結(jié)束)

RST (reset 重置)

URG (urgent 緊急)

11. php 中常用作用相似,性能差異很大的函數(shù)區(qū)分及舉例

參考 http://apps.hi.baidu.com/share/detail/43169774

12. posix 及 perl 兼容正則比較,及函數(shù)性能分析

POSIX 正則和 PCRE 正則最顯著的需要知道的不同點:

  1. PCRE 函數(shù)需要模式以分隔符閉合.

  2. POSIX 兼容正則沒有修正符。不像 POSIX, PCRE 擴展沒有專門用于大小寫不敏感匹配的函數(shù)。取而

代之的是,支持使用 /i 模式修飾符完成同樣的工作。其他模式修飾符同樣可用于改變匹配策略.

  1. POSIX 函數(shù)從最左面開始尋找最長的匹配,但是 PCRE 在第一個合法匹配后停止。如果字符串 不匹

配這沒有什么區(qū)別,但是如果匹配,兩者在結(jié)果和速度上都會有差別。為了說明這個不同,考慮下面的例子 (來自 Jeffrey Friedl 的《精通正則表達式》一書). 使用模式 one (self)?(selfsufficient)? 在字符串 oneselfsufficient 上匹配,PCRE 會匹配到 oneself, 但是使用 POSIX, 結(jié)果將是整個字符串 oneselfsufficient. 兩個子串都匹配原始字符串,但是 POSIX 將 最長的最為結(jié)果.

PCRE 可用的修飾符: (i,s,m)

13. 實現(xiàn) PERL 正則表達式,抓取 html 文件 a 標簽的所有 href 超鏈接

正則:/<a\s+.*?href='"['" >]/is

$html = <<<HTML

HTML;

$matches = array();

preg_match_all ( "/<a\s+.*?href='"['">]/is", html,matches ); print_r ($matches [1]); // 輸出所有超鏈接

?>

14. 預(yù)定義變量、魔術(shù)變量、魔術(shù)方法比較,及作用舉例

預(yù)定義變量(超級全局變量)

$GLOBALS

$_SERVER

$_GET

$_POST

$_COOKIE

$_SESSION

$_REQUEST

$_ENV

魔術(shù)方法 http://apps.hi.baidu.com/share/detail/17851228

construct 和 destruct

__autoload

get 和 set

isset 和 unset

call 和 callStatic

__clone

__toString

sleep 和 wakeup

__invoke

魔術(shù)變量 http://apps.hi.baidu.com/share/detail/17851228

LINE

FILE

DIR

CLASS

FUNCTION

METHOD

NAMESPACE

15. spl 常用數(shù)據(jù)結(jié)構(gòu)類

16. PHP 設(shè)計模式

工廠模式

建立一個工廠(一個函數(shù)或一個類方法)來制造新的對象

工廠模式 是一種類,它具有為您創(chuàng)建對象的某些方法。您可以使用工廠類創(chuàng)建對象,而不直接使用 new。這樣,如果您想要更改所創(chuàng)建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。

單例模式

某些應(yīng)用程序資源是獨占的,因為有且只有一個此類型的資源。例如,通過數(shù)據(jù)庫句柄到數(shù)據(jù)庫的連接是獨占的。您希望在應(yīng)用程序中共享數(shù)據(jù)庫句柄,因為在保持連接打開或關(guān)閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。

單元素模式可以滿足此要求。

PHP 中的單例模式(singleton pattern):指的是在 PHP 的應(yīng)用程序的范圍內(nèi)只對指定的類創(chuàng)建一個實例。

在 PHP 中使用單例模式的類通常擁有一個私有構(gòu)造函數(shù)和一個私有克隆函數(shù),以防 止用戶通過創(chuàng)建對象或者克隆對其進行實例化。還有一個靜態(tài)私有成員變量 instance 與靜態(tài)方法 getInstance。getInstance 負責對其本身實例化,然后將這個對象存儲在instance 靜態(tài)成員變量中,以確保只有一個實例被創(chuàng)建。

觀察者模式

命令鏈模式

策略模式

17. 負載均衡的 web 應(yīng)用服務(wù)器設(shè)計,例如 youku

用 PHP 做負載均衡指南

思考如何應(yīng)對以下問題? 參考 http://www.examw.com/linux/all/142494/

在 Apache 負載均衡的情況下,做 PHP 開發(fā)如何考慮一下幾方面:

PHP 源文件在服務(wù)器、PHP 文件上傳處理、相關(guān)配置文件、Session 會話放置、日志放置

Apache 負載均衡的原則:

參考 http://s456123123b.blog.163.com/blog/static/5632332220101080474642/

輪詢均衡策略 (輪詢轉(zhuǎn)發(fā)請求)

按權(quán)重分配均衡策略 (按響應(yīng)數(shù)量轉(zhuǎn)發(fā)請求)

權(quán)重請求響應(yīng)負載均衡策略 (按響應(yīng)流量轉(zhuǎn)發(fā)請求)

18. 如何優(yōu)化前端性能

  1. 頁面內(nèi)容的優(yōu)化

a) 降低請求數(shù)

合并 css、js 文件,集成 CSS 圖片

b) 減少交互通信量

壓縮技術(shù):壓縮 css、js 文件,優(yōu)化圖像,減少 cookie 體積;

合理利用緩存:使用外部 js/css 文件,緩存 ajax;

減少不必要的通信量:剔除無用腳本和樣式、推遲加載內(nèi)容、使用 GET 請求

c) 合理利用 “并行” 盡量避免重定向

慎用 Iframe 樣式表置于頂部 腳本放到樣式后面加載

d) 節(jié)約系統(tǒng)消耗

避免 CSS 表達式、濾鏡

  1. 服務(wù)器的優(yōu)化

a) b)

c)

d)

19. yahoo 的 34 條前端優(yōu)化法則

減少 HTTP 請求、利用 CDN 技術(shù)、 設(shè)置頭文件過期或者靜態(tài)緩存、Gzip 壓縮、把 CSS 放頂部、 把 JS 放底部、避免 CSS 表達式、將 JS 和 CSS 外鏈、減少 DNS 查找、減小 JS 和 CSS 的體積、 避免重定向、刪除重復(fù)腳本、 配置 ETags、緩存 Ajax、盡早的釋放緩沖、

用 GET 方式進行 AJAX 請求、延遲加載組件、 預(yù)加載組件、減少 DOM 元素數(shù)量、跨域分離組件、

減少 iframe 數(shù)量、不要出現(xiàn) 404 頁面、減小 Cookie、 對組件使用無 Cookie 的域名、減少 DOM 的訪問次數(shù)、開發(fā)靈活的事件處理句柄、使用 <link> 而非 @import、避免過濾器的使用、優(yōu)化圖片、優(yōu)化 CSS Sprites、 不要在 HTML 中縮放圖片、縮小 favicon. ico 的大小并緩存它、保證組件在 25K 以下、將組件打煲進一個多部分的文檔中

20. 數(shù)據(jù)庫緩存的基本理論,參考 memcached

什么是 Memcached?

memcached 是高性能的分布式內(nèi)存緩存服務(wù)器。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù),以提高動態(tài) Web 應(yīng)用的速度、提高可擴展性。

雖然 memcached 使用了同樣的 “Key=>Value” 方式組織數(shù)據(jù),但是它和共享內(nèi)存、APC 等本地緩存有非常大的區(qū)別。Memcached 是分布式的,也就是說 它不是本地的。它基于網(wǎng)絡(luò)連接(當然它也可以使用 localhost)方式完成服務(wù),本身它是一個獨立于應(yīng)用的程序或守護進程(Daemon 方式)

PHP 與 Memcached

Memcached 使用 libevent 庫實現(xiàn)網(wǎng)絡(luò)連接服務(wù),理論上可以處理無限多的連接,但是它和

基于反向代理的 Web 緩存;

基于反向代理的 Web 緩存

23. PHP 安全模式

php 安全模式:safe_mode=on|off

啟用 safe_mode 指令將對在共享環(huán)境中使用 PHP 時可能有危險的語言特性有所限制。可以將 safe_mode 是指為布爾值 on 來啟用,或者設(shè)置為 off 和腳本嘗試訪問的文件的 UID,以此作為限制機制的基礎(chǔ)。如果 UID 相同,則知性腳本;否則,腳本失敗。

當啟用安全模式時,一些限制將生效

1、 所有輸入輸出函數(shù)(例如 fopen ()、file () 和 require ())的適用會受到限制,只能用于與調(diào)用這些函數(shù)的

腳本有相同擁有者的文件

2、 如果試圖通過函數(shù) popen ()、system () 或 exec () 等執(zhí)行腳本,只有當腳本位于 safe_mode_exec_dir

配置指令指定的目錄才可能

3、HTTP 驗證得到進一步加強,因為驗證腳本用于者的 UID 劃入驗證領(lǐng)域范圍內(nèi)。此外,當啟用安

全模式時,不會設(shè)置 PHP_AUTH。

4、如果適用 MySQL 數(shù)據(jù)庫服務(wù)器,鏈接 MySQL 服務(wù)器所用的用戶名必須與調(diào)用 mysql_connect ()

的文件擁有者用戶名相同。

以下是一些和安全模式相關(guān)的配置選項

safe_mode_gid=on|off

safe_mode_include_dir=string

safe_mode_env_vars=string

safe_mode_exec_dir=string

safe_mode_protected_env_vars=string

24. 常見的 web 攻擊方式

常見攻擊

XSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往 Web 頁面里插入惡意 html 代碼,當用戶瀏覽該頁之時,嵌入的惡意 html 代碼會被執(zhí)行,從而達到惡意用戶的特殊 目的。XSS 屬于被動式的攻擊,因為其被動且不好利用,所以許多人常呼略其危害性。但是隨著前端技術(shù)的不斷進步富客戶端的應(yīng)用越來越多,這方面的問題越來 越受關(guān)注。舉個簡單例子 : 假如你現(xiàn)在是 sns 站點上一個用戶,發(fā)布信息的功能存在漏洞可以執(zhí)行 js 你在 此刻輸入一個 惡意腳本,那么當前所有看到你新信息的人的瀏覽器都會執(zhí)行這個腳本彈出提示框 (很爽吧 彈出廣告 :)),如果你做一些更為激進行為呢 后果難以想象。

CSRF (Cross Site Request Forgery),跨站點偽造請求。顧名思義就是 通過偽造連接請求在用戶不知情的情況下,讓用戶以自己的身份來完成攻擊者需要達到的一些目的。csrf 的攻擊不同于 xss csrf 需要被攻擊者的主動行為觸發(fā)。這樣聽來似乎是有 “被釣魚” 的嫌疑。

多窗口瀏覽器這這方面似乎是有助紂為虐的嫌疑,因為打開的新窗口是具有當前所有 會話的,如果是單瀏覽器窗口類似 ie6 就不會存在這樣的問題,因為每個窗口都是一個獨立的進程。舉個簡單例子 : 你正在玩白社會, 看到有人發(fā)了一個連接,你點擊過去,然后這個連接里面?zhèn)卧炝艘粋€送禮物的表單,這僅僅是一個簡單的例子,問題可見一般。

cookie 劫持。通過獲取頁面的權(quán)限,在頁面中寫一個簡單的到惡意站點的請 求,并攜帶用戶的 cookie 獲取 cookie 后通過 cookie 就可以直以被盜用戶的身份登錄站點。這就是 cookie 劫持。舉個簡單例子: 某人寫了一篇很有意思的日志,然后分享給大家,很多人都點擊查看并且分享了該日志,一切似乎都很正常,然而寫日志的人卻另有用心,在日志中偷偷隱藏了一個 對站外的請求,那么所有看過這片日志的人都會在不知情的情況下把自己的 cookie 發(fā)送給了 某人,那么他可以通過任意一個人的 cookie 來登錄這個人的賬戶。

SQL 注入攻擊

在 SQL 注入攻擊 中,用戶通過操縱表單或 GET 查詢字符串,將信息添加到數(shù)據(jù)庫查詢中。

DNS 攻擊

拒絕服務(wù)攻擊

拒絕服務(wù)攻擊即攻擊者想辦法讓目標機器停止提供服務(wù),是黑客常用的攻擊手段之。

攻擊者進行拒絕服務(wù)攻擊,實際上讓服務(wù)器實現(xiàn)兩種效果:一是迫使服務(wù)器的緩沖區(qū)滿,不接收新的請求;二是使用 IP 欺騙,迫使服務(wù)器把合法用戶的連接復(fù)位,影響合法用戶的連接

25. PHP 做好防盜鏈的基本思想 防盜鏈

什么是盜鏈?

盜鏈是指服務(wù)提供商自己不提供服務(wù)的內(nèi)容,通過技術(shù)手段繞過其它有利益的最終用戶界面 (如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益。

網(wǎng)站盜鏈會大量消耗被盜鏈網(wǎng)站的帶寬,而真正的點擊率也許會很小,嚴重損害了被盜鏈網(wǎng)站的利益。 如何做防盜鏈?

不定期更名文件或者目錄

限制引用頁

原理是,服務(wù)器獲取用戶提交信息的網(wǎng)站地址,然后和真正的服務(wù)端的地址相比較, 如果一致則表明是站內(nèi)提交,或者為自己信任的站點提交,否則視為盜鏈。實現(xiàn)時可以使用 HTTP_REFERER1 和 htaccess 文件 (需要啟用 mod_Rewrite),結(jié)合正則表達式去匹配用戶的每一個訪問請求。

文件偽裝

文件偽裝是目前用得最多的一種反盜鏈技術(shù),一般會結(jié)合服務(wù)器端動態(tài)腳本 (PHP/JSP/ASP)。實際上用戶請求的文件地址,只是一個經(jīng)過偽裝的腳本文件,這個腳本文件會對用戶的請求作認證,一般會檢查 Session,Cookie 或 HTTP_REFERER 作為判斷是否為盜鏈的依據(jù)。而真實的文件實際隱藏在用戶不能夠訪問的地方,只有用戶通過驗證以后才會返回給用戶

加密認證

這種反盜鏈方式,先從客戶端獲取用戶信息,然后根據(jù)這個信息和用戶請求的文件名 字一起加密成字符串 (Session ID) 作為身份驗證。只有當認證成功以后,服務(wù)端才會把用戶需要的文件傳送給客戶。一般我們會把加密的 Session ID 作為 URL 參數(shù)的一部分傳遞給服務(wù)器,由于這個 Session ID 和用戶的信息掛鉤,所以別人就算是盜取了鏈接,該 Session ID 也無法通過身份認證,從而達到反盜鏈的目的。這種方式對于分布式盜鏈非常有效。

隨機附加碼

每次,在頁面里生成一個附加碼,并存在數(shù)據(jù)庫里,和對應(yīng)的圖片相關(guān),訪問圖片時和此附加碼對比,相同則輸出圖片,否則輸出 404 圖片

加入水印

26. HTTP 請求頭信息和響應(yīng)頭信息

請求頭信息

POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1

Host: 172.30.4.102

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0

Accept: /

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip, deflate

Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Referer: http://172.30.4.102/scp1.1.0/index.php/prs/new_rnaseqtask/index_continue/13/364 Content-Length: 1819

Cookie:

ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache

Cache-Control: no-cache

響應(yīng)頭信息

HTTP/1.1 200 OK

Date: Fri, 02 Sep 2011 09:27:07 GMT

Server: Apache/2.2.3 (Red Hat)

X-Powered-By: PHP/5.1.6

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 31

Connection: close

Content-Type: text/html; charset=UTF-8

27. MySQL

MySQL 數(shù)據(jù)庫性能優(yōu)化

使用 mysqlreport;

正確使用索引:explain 分析查詢語句,組合索引,索引副作用(占空間、update)

開啟慢查詢?nèi)罩尽⑹褂寐樵兎治龉ぞ?mysqlsla;

索引緩存、索引代價(插入更新索引);

表鎖,行鎖,行鎖副作用(update 多時候變慢),在 select 和 update 混合的情況下,行鎖巧妙解決了讀寫互斥的問題;

開啟使用查詢緩存;

修改臨時表內(nèi)存空間;

開啟線程池;

MySQL Query 語句優(yōu)化的基本思路和原則

  1. 優(yōu)化需要優(yōu)化的 Query;

  2. 定位優(yōu)化對象的性能瓶頸;

  3. 明確優(yōu)化目標;

  4. 從 Explaing 入手;

  5. 多使用 Profile;

  6. 永遠用小結(jié)果集推動大的結(jié)果集;

  7. 盡可能在索引中完成排序;

  8. 只取自己需要的 Columns;

  9. 僅僅使用最有效的過濾條件;

  10. 盡可能避免復(fù)雜的 Join 和子查詢。

MySQL 中 MyISAM 引擎和 InnoDB 引擎的區(qū)別以及它們的性能

1:Innodb 支持事物,Myisam 不支持

2:鎖定機制不一樣,Myisam 支持表鎖定,而 Innodb 支持行鎖

3:Myisam 不支持外鍵,Innodb 能支持

4:Myisam 能在特定環(huán)境下支持全文索引,而 Innodb 不支持

5:Myisam 支持數(shù)據(jù)壓縮,Innodb 不支持

6:在數(shù)據(jù)存儲上,Myisam 占用的空間少,Innodb 相對多些

7:Myisam 在批量插入和查詢方面速度上有優(yōu)勢,而 Innodb 由于支持行鎖,所以在數(shù)據(jù)修改方面更勝一籌

MySQL 存儲引擎

MyISAM:不支持事務(wù)、表鎖和全文索引,操作速度快

InnoDB:行鎖設(shè)計、支持外鍵、支持安全事務(wù)

HEAP:數(shù)據(jù)存放在內(nèi)存中,臨時表

NDB Cluster:MySQL 的簇式數(shù)據(jù)庫引擎

CSV: 存儲引擎把數(shù)據(jù)以逗號分隔的格式存儲在文本文件中。

FEDERATED:存儲引擎表并不存放數(shù)據(jù),它只是指向一臺遠程 MySQL 數(shù)據(jù)庫服務(wù)器上的表 Archive: 只支持 INSERT 和 SELECT 操作,壓縮后存儲,非常適合存儲歸檔數(shù)據(jù)

Merge:允許將一系列等同的 MyISAM 表以邏輯方式組合在一起,并作為 1 個對象引用它們 表類型,區(qū)分表類型

優(yōu)化表設(shè)計的常用思路

負載均衡的數(shù)據(jù)庫設(shè)計

數(shù)據(jù)類型及詳細定義,區(qū)分

28. Apache

性能優(yōu)化,配置,fastCGI 等幾種工作模式

29. Ajax

用 JS 實現(xiàn) Ajax 功能

var createXHR = function(){
 
}
 
var addURLParam = function(url, name, value){
 
}
 
var xhr = createXHR();
 
xhr.onreadystatechange = function(){
 
}
 
var url = 'testAjax.php';
 
addURLParam(url, 'name', 'linjm');
 
xhr.open('get',url,true);
 
xhr.send(NULL);
 
if(xhr.readyState == 4){    } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){  } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){    } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{}

30. Javascript

變量、作用域、作用域鏈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,253評論 2 375