PHP面試題2021進大廠必看題型


如果你正在尋找PHP開發的工作,那么提前掌握最新的PHP面試題技巧,必然能使你在求職過程中事半功倍。博主整理了最全面的PHP面試題,包括PHP基礎面試題、PHP高級面試題以及PHP常見面試題和騰訊等大廠面試題!

關注微信公眾號 “PHP大神” 回復“面試題”可以免費下載更多php相關面試題 ,整理不易請多關注,如有錯誤請多包涵哈!

一、單選題(共29題,每題5分)

1.PHP執行的時候有如下執行過程:Scanning(Lexing) - Compilation - Execution - Parsing,其含義分別為:

A、將PHP代碼轉換為語言片段(Tokens)、將Tokens轉換成簡單而有意義的表達式、順次執行Opcodes、將表達式編譯成Opocdes

B、將PHP代碼轉換為語言片段(Tokens)、將表達式編譯成Opocdes、順次執行Opcodes、將Tokens轉換成簡單而有意義的表達式

C、將PHP代碼轉換為語言片段(Tokens)、將Tokens轉換成簡單而有意義的表達式、將表達式編譯成Opocdes、順次執行Opcodes

D、將PHP代碼轉換為語言片段(Tokens)、將表達式編譯成Opocdes、將Tokens轉換成簡單而有意義的表達式、順次執行Opcodes

參考答案:C

答案解析:

正確答案為C

1).Scanning(Lexing) ,將PHP代碼轉換為語言片段(Tokens)

2).Parsing, 將Tokens轉換成簡單而有意義的表達式

3).Compilation, 將表達式編譯成Opocdes

4).Execution, 順次執行Opcodes,每次一條,從而實現PHP腳本的功能。

2.不是php魔術常量的是?

A、__TRAIT__

B、__CALL__

C、__CLASS__

D、__FUNCTION__

參考答案:B

答案解析:

\_\_LINE\_\_ \_\_FILE\_\_ \_\_DIR\_\_ \_\_FUNCTION\_\_ \_\_CLASS\_\_ \_\_TRAIT\_\_ \_\_METHOD\_\_ \_\_NAMESPACE\_\_

3.php選項/信息函數作用錯誤的是?

A、phpinfo() 輸出關於 PHP 配置的信息

B、php_sapi_name() 返回 web 服務器和 PHP 之間的接口類型

C、ini_set() 為一個配置選項設置值

D、ini_get() 獲取所有配置選項

參考答案:D

答案解析:

ini\_get() 是獲取一個配置選項,獲取所有配置選項的函數是ini\_get\_all()

4.下列代碼的輸出是 ?

	
mother="son";echo$$father;

A、son

B、mother

C、motherson

D、error

參考答案:A

答案解析:

php里變量字符串之前加$等於指向另外一個字符串

5.下列對shell 變量FRUIT 操作,正確的是?

A、為變量賦值:$FRUIT=apple

B、顯示變量的值:fruit=apple

C、顯示變量的值:echo $FRUIT

D、判斷變量是否有值:[ -f ―$FRUIT ]

參考答案:C

答案解析:

為變量賦值FRUIT=apple; 顯示變量的值為C; 判斷是否有值[-n $FRUIT];

6.以下不是線性表是?

A、數組

B、二叉樹

C、隊列

D、棧

參考答案:B

答案解析:

二叉樹是樹結構

7.以下哪個函數不是PHP的文件指針操作?

A、ftell()

B、fseek()

C、file()

D、feof()

參考答案:C

答案解析:

ftell() 返回文件指針位置 fseek() 在文件指針中定位 feof() 測試文件指針是否在結尾

關注微信公眾號 “PHP大神” 回復“面試題”可以免費下載更多php相關面試題 ,整理不易請多關注,如有錯誤請多包涵哈!

8.關於線程的,說法錯誤的是?

A、線程是進程的一個實體,是CPU調度和分派的基本單位

B、它是比進程更小的能獨立運行的基本單位

C、線程和進程一樣擁有系統資源

D、線程自己基本上不擁有系統資源

參考答案:C

答案解析:

線程是指進程內的一個執行單元,也是進程內的可調度實體。線程自己基本上不擁有系統資源

9.GoAccess雖然很強大但是他不能做以下哪項工作?

A、生成統計數據帶寬統計

B、可生成HTML報告

C、可發送HTTP請求

D、各HTTP狀態碼統計

參考答案:C

答案解析:

GoAccess:是一款開源、實時,運行在命令行終端下的web日志分析工具。該工具提供快速、 多樣的HTTP狀態統計,可以令管理員不再糾結於統計各類數據 GoAccess主要以統計為主

10.PHP的三個模塊不包括哪個?

A、內核

B、zend引擎

C、擴展層

D、解析層

參考答案:D

答案解析:

PHP總共三個模塊:內核、zend引擎、以及擴展層

11.CSRF攻擊描述錯誤的是?

A、CSRF需要有JavaScript代碼

B、CSRF攻擊惡意代碼位於第三方站點上

C、過濾用戶的輸入可以防止惡意代碼注入到某個站點,但是它無阻止法惡意代碼在第三方站點上運行

D、CSRF符合同源策略

參考答案:A

答案解析:

XSS攻擊需要JavaScript代碼,CSRF攻擊不需要JavaScript代碼

12.關於PHP數組在C語言中是哪種存儲結構?

A、單鏈表

B、雙鏈表

C、循環鏈表

D、二叉樹

參考答案:B

答案解析:

雙鏈表

13.關於組合模式,說法錯誤的是?

A、它在我們樹型結構的問題中,模糊了簡單元素和復雜元素的概念,客戶程序可以向處理簡單元素一樣來處理復雜元素,從而使得客戶程序與復雜元素的內部結構解耦

B、定義了一種一對多的依賴關系,讓多個觀察者對象同時 監聽某一個主題對象。這個主題對象在狀態 發生變化時,會通知所有觀察者對象,使他們能夠自動更新自己

C、樹枝和葉子實現統一接口,樹枝內部組合該接口

D、將對象組合成樹形結構以表示"部分-整體"的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性

參考答案:B

答案解析:

將對象組合成樹形結構以表示"部分-整體"的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性 樹枝和葉子實現統一接口,樹枝內部組合該接口 它在我們樹型結構的問題中,模糊了簡單元素和復雜元素的概念,客戶程序可以向處理簡單元素一樣來處理復雜元素,從而使得客戶程序與復雜元素的內部結構解耦

14.數據結構的儲存方式描述錯誤的是?

A、順序存儲用數據元素在存儲器中的相對位置來表示數據元素之間的邏輯結構

B、鏈式存儲在每一個數據元素中增加一個存放另一個元素地址的指針,用該指針來表示數據元素之間的邏輯結構

C、順序結構數據元素存放的地址是連續的

D、數據算法的實現依賴於所采用的邏輯結構

參考答案:D

答案解析:

順序存儲結構:用數據元素在存儲器中的相對位置來表示數據元素之間的邏輯結構(關系)。 鏈式存儲結構:在每一個數據元素中增加一個存放另一個元素地址的指針(pointer ),用該指針來表示數據元素之間的邏(需要更多學習資料和面試題請加入qun6/7/7/0/7/9/7/7/0)輯結構(關系) 順序結構:數據元素存放的地址是連續的; 鏈式結構:數據元素存放的地址是否連續沒有要求。 數據的邏輯結構和物理結構是密不可分的兩個方面,一個算法的設計取決於所選定的邏輯結構,而算法的實現依賴於所采用的存儲結構

15.下面Http協議請求方式中不包括?

A、OPTIONS

B、HEAD

C、DELETE

D、SET

參考答案:D

答案解析:

沒有SET

16.下邊不是php的偽類型的是?

A、mixed

B、void

C、array|object

D、callable

E、以上都是

參考答案:E

答案解析:

答案是沒有答案、php的偽類型包含 mixed: 說明返回可包含多種類型 number: 說明一個參數可以是 integer 或者 float callback或者callable: 說明可以是回調函數 array|object: 說明既可以是array也可以是object void: 說明返回值無意義、作為入參表示不接受任何參數 這里想說的是、我們要打破常規、有些a、b、c、d中並沒有我們想要的、而不是每一個都必須有標准答案,重要的是我們學會一個知識點兒~、因為必須提交一個答案,所以~~~

17.文本文件和二進制文件的存取,錯誤的是?

A、用記事本打開二進制文件時, 出現亂碼是很必然了

B、二進制文件還是文本文件, 在存儲時都是一連串的0和1

C、打開方式是一樣的

D、二進制文件最小單位則是位

參考答案:C

答案解析:

打開方式不同, 這些0和1的處理就不同

18.不是PHP加密函數的是?

A、openssl_encrypt

B、json_encode

C、mcrypt_encrypt

D、md5

參考答案:B

答案解析:

md5 sha1 mcrypt\_encrypt openssl\_encrypt

19.什么是PHP的多維數組

A、PHP的值是多種數據類型

B、PHP的值也是數組類型

C、PHP的索引有數字和字母

D、以上都是

參考答案:B

答案解析:

多維數組:數組中的值也是數組

20.下面哪一個正則表達式用來驗證電子郵件(如: zhang.san_123@scse.com.cn )的格式最正確()

A、[_\.0-9a-z]@([0-9a-z]+\.)+[0-9a-z\.-]{2,6}

B、[_\.0~9a~z-]*@([0~9a~z-]+\.)+[0~9a~z\.]+

C、[_\.0-9a-z-]+@([0-9a-z-]+\.)+[0-9a-z\.]+

D、[_\.0~9a~z-]+@([0~9a~z-]+\.)+[0~9a~z]{2,6}

參考答案:C

答案解析:

C

<pre class="prettyprint lang-php">[_\.0-9a-z-]+@([0-9a-z-]+\.)+[0-9a-z\.]+ <span >zhang.san_123@scse.com.cn

@符號之前的字符出現的次數必須要>=1次,因此為"+" </span>([0-9a-z-]+\.)+表示的是@后面以字符加'.'構成的部分可以出現多次,也就是scse.com.(注意正則表達式的貪婪模式)

[0-9a-z\.]+ 表示的就是最后的cn <span > </span>

21.( )是一種客戶端腳本語言,它采用解釋方式在計算機上執行。

A、Python

B、Java

C、PHP

D、JavaScript

參考答案:D

答案解析:

JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的腳本語言,最早是在HTML(標准通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。

22.以下關於結構型模式說法錯誤的是?

A、結構型模式可以在不破壞類封裝性的基礎上,實現新的功能

B、結構型模式主要用於創建一組對象

C、結構型模式可以創建一組類的統一訪問接口

D、結構型模式可以在不破壞類封裝性的基礎上,使得類可以同不曾估計到的系統進行交互

參考答案:B

答案解析:

結構型(structural):處理類或對象間的組合

23.下面關於數組和數據結構的說法錯誤的是?

A、棧 是 后進先出的線性表,可以隨意寫入和讀取數據

B、隊列 是先進先出的線性表,只允許后端插入,前端進行刪除操作

C、php中可以用 array_push 入棧,arrar_pop 實現出棧

D、php中用array_push入列,array_shift 出列

參考答案:A

答案解析:

棧 只能在一端進行寫入和刪除的操作。

24.以下關於引用說法錯誤的是?

A、引用不是C的指針

B、引用不允許用兩個變量來指向同一個內容

C、用引用可以傳遞變量

D、可以將一個變量通過引用傳遞給函數,這樣該函數就可以修改其參數的值。

參考答案:B

答案解析:

引用是允許用兩個變量來指向同一個內容的

25.數組的遍歷方式,下列錯誤的是?

A、foreach

B、each

C、for

D、list

參考答案:D

答案解析:

list只能把數組的元素變成變量,並不是遍歷。

聯合使用list()、each()和while循環遍歷數組

each()函數需要傳遞一個數組作為一個參數,返回數組中當前元素的鍵/值對,並向后移動數組指針到下一個元素的位置。

list()函數,這不是一個真正的函數,是PHP的一個語言結構。list()用一步操作給一組變量進行賦值。

26.不能匹配數字的正則表達式是

A、^{0-9}*$

B、^\d{n}$

C、^\d{n,}$

D、^\d{m,n}$

參考答案:A

答案解析:

{}是元字符號,A缺少元字符

27.PHP運行模式哪個不適合做http服務?

A、cgi模式

B、fastcgi模式

C、isapi模式

D、cli模式

參考答案:D

答案解析:

cgi模式、fastcgi模式、isapi模式都可以提供http服務 cli模式不能提供http服務

28.在 Linux 中,文件( )用於解析主機域名。

A、etc/hosts

B、etc/host.conf

C、etc/hostname

D、 etc/bind

參考答案:A

答案解析:

etc/hosts 用於解析主機域名

關注微信公眾號 “PHP大神” 回復“面試題”可以免費下載更多php相關面試題 ,整理不易請多關注,如有錯誤請多包涵哈!

二.問答題

1. php 的垃圾回收機制

PHP 可以自動進行內存管理,清除不需要的對象:

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

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

2. session 與 cookie 的區別和聯系

區別:

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

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

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

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

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

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

關系:

Session 需要借助 Cookie 才能正常工作。如果客戶端完全禁止 Cookie,Session 將失效!因為 Session 是由應用服務器維持的一個 服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的 SessionID, 用該 SessionID 為標識符來存取服務器端的 Session 存儲空間。

而 SessionID 這一數據則是保存到客戶端,用 Cookie 保存的,用戶提交頁面時,會將這一 SessionID 提交到服務器端,來存取 Session 數據。這一過程,是不用開發人員干預的。所以一旦客戶端禁用 Cookie,那么 Session 也會失效。

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

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

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

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

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

5. PDO、adoDB、PHPLib 數據庫抽象層比較

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

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

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

轉移數據庫平台時,程序代碼也不必做太大的更動,事實上只需要改動數據庫配置文 件。提供了大量的拼裝方法,目的就是針對不同的數據庫在抽象層的底層對這些語句進行針對性的翻譯,以適應不同的數據庫方言!

但是這個抽象層似乎體積過於龐 大了,全部文件大概有 500K 左右,如果你做一個很小的網站的話,用這個似乎大材小用了

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

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

ADODB 支持 緩存查詢、移動記錄集、(HTML、分頁、選擇菜單生成)、事務處理、輸出到文件。

6. 長連接、短連接的區別和使用

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

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

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

長連接:

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

短連接:

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

7. HTTP 協議詳解、應用

http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、短連接、靈活、應用層的協議,常基於 TCP 的連接方式。

(HTTP 響應狀態碼)

HTTP 響應狀態碼

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

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

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

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

4xx:客戶端錯誤 -- 請求有語法錯誤或請求無法實現

5xx:服務器端錯誤 -- 服務器未能實現合法的請求

常見狀態代碼、狀態描述、說明:

200 OK // 客戶端請求成功

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

401 Unauthorized // 請求未經授權,這個狀態代碼必須和 WWW-Authenticate 報頭域一起使用 403 Forbidden // 服務器收到請求,但是拒絕提供服務

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

500 Internal Server Error // 服務器發生不可預期的錯誤

503 Server Unavailable // 服務器超時 // 可能恢復正常

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

// 服務器返回此響應時,不會返回網頁內容。

8. socket 連接步驟

Socket(套接字)概念

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

Socket 連接過程

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

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

服務器監聽:是服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態。

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

連接確認:是指當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端

套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

9. TCP 協議,三次握手、四次揮手

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

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

SYN (synchronous 建立聯機) 同步

ACK (acknowledgement 確認)

PSH (push 傳送)

FIN (finish 結束)

RST (reset 重置)

URG (urgent 緊急)

10. posix 及 perl 兼容正則比較,及函數性能分析

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

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

2)、POSIX 兼容正則沒有修正符。不像 POSIX, PCRE 擴展沒有專門用於大小寫不敏感匹配的函數。取而代之的是,支持使用 /i 模式修飾符完成同樣的工作。其他模式修飾符同樣可用於改變匹配策略.

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

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

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

11. 如何優化前端性能

1) 頁面內容的優化

a) 降低請求數

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

b) 減少交互通信量

壓縮技術:壓縮 css、js 文件,優化圖像,減少 cookie 體積;

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

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

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

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

d) 節約系統消耗

避免 CSS 表達式、濾鏡

2) 服務器的優化

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

什么是盜鏈?

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

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

不定期更名文件或者目錄

限制引用頁

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

文件偽裝

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

加密認證

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

隨機附加碼

每次,在頁面里生成一個附加碼,並存在數據庫里,和對應的圖片相關,訪問圖片時和此附加碼對比,相同則輸出圖片,否則輸出 404 圖片

加入水印

關注微信公眾號 “PHP大神” 回復“面試題”可以免費下載更多php相關面試題 ,整理不易請多關注,如有錯誤請多包涵哈!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM