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 總大?。篎irefox 和 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.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、分頁、選擇菜單生成)、事務處理、輸出到文件。
5.長連接、短連接的區別和使用
長連接:client 方與 server 方先建立連接,連接建立后不斷開,然后再進行報文發送和接收。這種方式下由于通訊連接一直存在。此種方式常用于 P2P 通信。
短連接:Client 方與 server 每進行一次報文收發交易時才進行通訊連接,交易完畢后立即斷開連接。此方式常用于一點對多點通訊。C/S 通信。
長連接與短連接的使用時機:
長連接:短連接多用于操作頻繁,點對點的通訊,而且連接數不能太多的情況。每個 TCP 連 接的建立都需要三次握手,每個 TCP 連接的斷開要四次握手。如果每次操作都要建立連接然后再操作的話處理速度會降低,所以每次操作下次操作時直接發送數據 就可以了,不用再建立 TCP 連接。例如:數據庫的連接用長連接,如果用短連接頻繁的通信會造成 socket 錯誤,頻繁的 socket 創建也是對資源的浪費。
短連接:web 網站的 http 服務一般都用短連接。因為長連接對于服務器來說要耗費一定 的資源。像 web 網站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源。試想如果都用長連接,而且同時用成千上萬的用戶,每個用戶都占有一個 連接的話,可想而知服務器的壓力有多大。所以并發量大,但是每個用戶又不需頻繁操作的情況下需要短連接。
6.TCP 協議,三次握手、四次揮手
TCP 協議 (Transmission Control Protocol) 是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接,四次揮手斷開連接。
位碼即 tcp 標志位,有 6 種標示:
SYN (synchronous 建立聯機)同步
ACK (acknowledgement確認)
PSH (push 傳送)
FIN (finish 結束)
RST (reset 重置)
URG (urgent 緊急)
7.yahoo 的 34 條前端優化法則
減少 HTTP 請求、利用 CDN 技術、 設置頭文件過期或者靜態緩存、Gzip 壓縮、把 CSS 放頂部、 把 JS 放底部、避免 CSS 表達式、將 JS 和 CSS 外鏈、減少 DNS 查找、減小 JS 和 CSS 的體積、 避免重定向、刪除重復腳本、 配置 ETags、緩存 Ajax、盡早的釋放緩沖、用 GET 方式進行 AJAX 請求、延遲加載組件、 預加載組件、減少 DOM 元素數量、跨域分離組件、減少 iframe 數量、不要出現 404 頁面、減小 Cookie、 對組件使用無 Cookie 的域名、減少 DOM 的訪問次數、開發靈活的事件處理句柄、使用 <link> 而非 @import、避免過濾器的使用、優化圖片、優化 CSS Sprites、 不要在 HTML 中縮放圖片、縮小 favicon. ico 的大小并緩存它、保證組件在 25K 以下、將組件打包進一個多部分的文檔中
8.PHP 安全模式
php 安全模式:safe_mode=on|off 啟用 safe_mode 指令將對在共享環境中使用 PHP 時可能有危險的語言特性有所限制??梢詫?safe_mode 是指為布爾值 on 來啟用,或者設置為 off 和腳本嘗試訪問的文件的 UID,以此作為限制機制的基礎。如果 UID 相同,則執行腳本;否則,腳本失敗。
當啟用安全模式時,一些限制將生效
1、 所有輸入輸出函數(例如 fopen ()、file () 和 require ())的適用會受到限制,只能用于與調用這些函數的腳本有相同擁有者的文件
2、 如果試圖通過函數 popen ()、system () 或 exec () 等執行腳本,只有當腳本位于 safe_mode_exec_dir配置指令指定的目錄才可能
3、HTTP 驗證得到進一步加強,因為驗證腳本用于者的 UID 劃入驗證領域范圍內。此外,當啟用安全模式時,不會設置 PHP_AUTH。
4、如果適用 MySQL 數據庫服務器,鏈接 MySQL 服務器所用的用戶名必須與調用 mysql_connect ()的文件擁有者用戶名相同。
以下是一些和安全模式相關的配置選項
safe_mode_gid=onoff
safe_mode_include_dir=string
safe_mode_env_vars=string
safe_mode_exec_dir=string
safe_mode_protected_env_vars=string
9.PHP 做好防盜鏈的基本思想 防盜鏈
什么是盜鏈?
盜鏈是指服務提供商自己不提供服務的內容,通過技術手段繞過其它有利益的最終用戶界面 (如廣告),直接在自己的網站上向最終用戶提供其它服務提供商的服務內容,騙取最終用戶的瀏覽和點擊率。受益者不提供資源或提供很少的資源,而真正的服務提供商卻得不到任何的收益。網站盜鏈會大量消耗被盜鏈網站的帶寬,而真正的點擊率也許會很小,嚴重損害了被盜鏈網站的利益。
如何做防盜鏈?
1.不定期更名文件或者目錄
2.限制引用頁
原理是,服務器獲取用戶提交信息的網站地址,然后和真正的服務端的地址相比較, 如果一致則表明是站內提交,或者為自己信任的站點提交,否則視為盜鏈。實現時可以使用 HTTP_REFERER1 和 htaccess 文件 (需要啟用 mod_Rewrite),結合正則表達式去匹配用戶的每一個訪問請求。
3.文件偽裝
文件偽裝是目前用得最多的一種反盜鏈技術,一般會結合服務器端動態腳本 (PHP/JSP/ASP)。實際上用戶請求的文件地址,只是一個經過偽裝的腳本文件,這個腳本文件會對用戶的請求作認證,一般會檢查 Session,Cookie 或 HTTP_REFERER 作為判斷是否為盜鏈的依據。而真實的文件實際隱藏在用戶不能夠訪問的地方,只有用戶通過驗證以后才會返回給用戶
4.加密認證
這種反盜鏈方式先從客戶端獲取用戶信息,然后根據這個信息和用戶請求的文件名 字一起加密成字符串 (Session ID) 作為身份驗證。只有當認證成功以后,服務端才會把用戶需要的文件傳送給客戶。一般我們會把加密的 Session ID 作為 URL 參數的一部分傳遞給服務器,由于這個 Session ID 和用戶的信息掛鉤,所以別人就算是盜取了鏈接,該 Session ID 也無法通過身份認證,從而達到反盜鏈的目的。這種方式對于分布式盜鏈非常有效。
5.隨機附加碼
每次,在頁面里生成一個附加碼,并存在數據庫里,和對應的圖片相關,訪問圖片時和此附加碼對比,相同則輸出圖片,否則輸出404圖片
6.加入水印
點關注,不迷路
好了各位,以上就是這篇文章的全部內容了,能看到這里的人呀,都是人才。之前說過,PHP方面的技術點很多,也是因為太多了,實在是寫不過來,寫過來了大家也不會看的太多,所以我這里把它整理成了PDF和文檔,如果有需要的可以點這里https://shimo.im/docs/rjJttdvCJpYtHpW3/ 《進階PHP月薪30k>>>架構師成長路線【視頻、面試文檔免費獲取】》