在 PHP 中,您能夠在服務器執行 PHP 文件以前在該文件中插入一個文件的內容。include 和 require 語句用於在執行流中插入寫在其餘文件中的有用的代碼。php
include:包含一個不存在的文件,會提示警告程序會繼續執行html
include()語句將在其被調用的位置處包含一個文件。包含一個文件與在該語句所在位置複製制定文件的數據具備相同內容的效果。mysql
include_once():函數的做用與include相同,不過它會首先驗證是否已經包含了該文件。若是已經包含,則再也不執行include_once。不然,則必須包含該文件。除了這一點與include徹底相同。git
require:出現錯誤後直接終止退出,程序再也不執行web
require_once 只會加載同一個文件一次,require會加載屢次。 算法
(雙引號內部變量會解析,單引號則不解析.)
"" 雙引號裏面的字段會通過編譯器解釋,而後再看成HTML代碼輸出。
''單引號裏面的不進行解釋,直接輸出。sql
http協議的傳輸方式有不少種,處於安全考慮,經常使用的通常都是GET和POST兩種,先來介紹下這兩種數據庫
1)GET:獲取資源
GET方法用來請求訪問已被URL識別的資源設計模式
2)POST:傳輸實體主體
POST方法用來請求服務器傳輸信息實體的主體數組
GET和POST的區別:
首先,使用目標不一樣:GET方法只是用來查詢,不會對瀏覽器上的信息產生影響,每次GET的方法都是相同的
其次,大小不一樣:GET是放在URL首部,所以大小隨着瀏覽器而定,而POST則是在報文中,只要沒有具體限制,文件的大小是沒限制的
而後,安全性不一樣:GET採用的是明文傳輸,而POST是放在報文內部,沒法看到
從使用場景的角度來講,通常像用戶註冊登陸這種信息都是私密的,採用POST,而針對查詢等,爲了快速,大多采用GET傳輸。
(關於關於GET和POST的區別,最近從新看了不少別人寫的博客啊資料什麼的,發現上面的解釋比較模糊,我就在下面的評論區裏面將區別清晰的描述一下,固然,後面的博客也會詳細的解釋)
接下來介紹其餘幾種數據傳輸方式:
3)PUT:傳輸文件
PUT要求在請求報文的主體中包含文件內容,而後保存到請求URL指定的位置
處於安全考慮,通常web網站不使用此方法,若配合web的安全驗證機制,或者架構採用REST標準的網站,就可能開放使用此方法
4)HEAD:得到報文首部
HEAD和GET方法同樣,只不過不返回報文主體部分,用於確認URI的有效性及資源更新的日期時間等
5)DELETE:刪除文件
DELETE是與PUT相反的方法,是按請求URI刪除指定的資源
處於安全考慮,通常web網站不使用此方法,若配合web的安全驗證機制,或者架構採用REST標準的網站,就可能開放使用此方法
6)OPTIONS:詢問支持的方法
用來查詢針對請求URI指定的資源支持的方法
7)TRACE:追蹤路徑
是讓web服務器端將以前的請求通訊還回給客戶端的方法
發送請求時,在Max-Frowards首部字段中填入數值,每通過一個服務器端就-1,當數值爲0時,中止傳輸,最後收到服務器返回狀態碼200 OK的響應
可是,這種方法基本不多使用,並且很容易引發XST(跨站追蹤)攻擊,就更不會用到了。
8)CONNECT:要求採用隧道協議鏈接代理
該方法要求在於代理服務器通訊時創建隧道,實現用隧道協議進行TCP通訊,主要使用SSL(安全套接層)和TLS(傳輸層安全)協議把通訊內容加密後通過網絡傳輸。
安全對一套程序來講相當重要,請說說在開發中應該注意哪些安全機制?
①防遠程提交;②防SQL注入,對特殊代碼進行過濾;③防止註冊機灌水,使用驗證碼;
在程序的開發中,如何提升程序的運行效率?
①優化SQL語句,查詢語句中儘可能不使用select *,用哪一個字段查哪一個字段;少用子查詢可用錶鏈接代替;少用模糊查詢;②數據表中建立索引;③對程序中常常用到的數據生成緩存;
①存儲位置:session存儲於服務器,cookie存儲於瀏覽器
②安全性:session安全性比cookie高
③session爲‘會話服務’,在使用時須要開啓服務,cookie不須要開啓,能夠直接用
(1)Where子句中:where表之間的鏈接必須寫在其餘Where條件以前,那些能夠過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最後。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3) 避免在索引列上使用計算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)對查詢進行優化,應儘可能避免全表掃描,首先應考慮在 where 及 order by 涉及的列上創建索引。
(6)應儘可能避免在 where 子句中對字段進行 null 值判斷,不然將致使引擎放棄使用索引而進行全表掃描
(7)應儘可能避免在 where 子句中對字段進行表達式操做,這將致使引擎放棄使用索引而進行全表掃描
MyISAM 是非事務的存儲引擎;適合用於頻繁查詢的應用;表鎖,不會出現死鎖;適合小數據,小併發
innodb是支持事務的存儲引擎;合於插入和更新操做比較多的應用;設計合理的話是行鎖(最大區別就在鎖的級別上);適合大數據,大併發。
MySQL數據庫做發佈系統的存儲,一天五萬條以上的增量,預計運維三年,怎麼優化?
a. 設計良好的數據庫結構,容許部分數據冗餘,儘可能避免join查詢,提升效率。
b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。
c. mysql庫主從讀寫分離。
d. 找規律分表,減小單表中的數據量提升查詢速度。
e。添加緩存機制,好比memcached,apc等。
f. 不常常改動的頁面,生成靜態頁面。
g. 書寫高效率的SQL。好比 SELECT * FROM TABEL 改成 SELECT field_1, field_2, field_3 FROM TABLE.
對於大流量的網站,您採用什麼樣的方法來解決各頁面訪問量統計問題?
a. 確認服務器是否能支撐當前訪問量。
b. 優化數據庫訪問。
c. 禁止外部訪問連接(盜鏈), 好比圖片盜鏈。
d. 控制文件下載。
e. 使用不一樣主機分流。
f. 使用瀏覽統計軟件,瞭解訪問量,有針對性的進行優化。
簡述 private、 protected、 public修飾符的訪問權限。
private : 私有成員, 在類的內部才能夠訪問。
protected : 保護成員,該類內部和繼承類中能夠訪問。
public : 公共成員,徹底公開,沒有訪問限制。
常見的HTTP狀態碼:
200 - 請求成功
301 - 資源(網頁等)被永久轉義到其餘URL
404 - 請求的資源(網頁等)不存在
505 - 內部服務器錯誤
HTTP狀態碼分類:
1** - 信息,服務器收到的請求,須要請求者繼續執行操做
2** - 成功,操做被成功接收並處理
3** - 重定向,須要進一步的操做以完成請求
4** - 客戶端錯誤,請求包含語法錯誤或者沒法完成請求
5** 服務器錯誤,服務器在處理請求的過程 中發生了錯誤
git和svn的區別
GIT是分佈式的,SVN不是
GIT把內容按元數據方式存儲,而SVN是按文件
GIT分支和SVN的分支不一樣
GIT沒有一個全局的版本號,而SVN有
GIT的內容完整性要優於SVN
主鍵索引:數據記錄裏面不能有null,數據內容不能重複,在一張表裏面不能有多個主鍵索引。
普通索引:使用字段關鍵字創建的索引,主要是提升查詢速度
惟一索引:字段數據是惟一的,數據內容裏面可否爲null,在一張表裏面,是能夠添加多個惟一索引。
全文索引:在比較老的版本中,只有myisam引擎支持全文索引,在innodb5.6後引擎也支持全文索引,在mysql中全文索引不支持中文。咱們通常使用sphinx集合coreseek來實現中文的全文索引。
工廠模式:是一種類,它具備爲您建立對象的某些方法。
單元素模式:某些應用程序資源是獨佔的,由於有且只有一個此類型的資源。
觀察者模式:一個對象經過添加一個方法(該方法容許另外一個對象,即觀察者 註冊本身)使自己變得可觀察。
命令鏈模式:以鬆散耦合主題爲基礎,發送消息、命令和請求,或經過一組處理程序發送任意內容。
策略模式:算法是從複雜類提取的,於是能夠方便地替換。
用PHP打印出前一天的時間,格式是2006-5-10 22:21:21
echo date('Y-m-d H:i:s',time()-60*60*24); 或者echo date('Y-m-d H:i:s',strtotime('-1 day'));
echo(),print(),print_r()的區別
echo是語言結構,無返回值;
print功能和echo基本相同,不一樣的是print是函數,有返回值;
print_r是遞歸打印,用於輸出數組或對象。
用PHP寫出顯示客戶端IP與服務器IP的代碼
echo '客戶端IP:'.$_SERVER['REMOTE_ADDR'].'<br />'; echo '服務器端IP:'.gethostbyname($_SERVER['SERVER_NAME']);
閉包是指有權訪問另外一個函數做用域中變量的函數,建立閉包的最多見的方式就是在一個函數內建立另外一個函數,經過另外一個函數訪問這個函數的局部變量,利用閉包能夠突破做用鏈域,將函數內部的變量和方法傳遞到外部。
__LINE__ 文件中的當前行號。
__FILE__ 文件的完整路徑和文件名。若是用在被包含文件中,則返回被包含的文件名。
__DIR__ 文件所在的目錄。若是用在被包括文件中,則返回被包括的文件所在的目錄。
__FUNCTION__ 常量返回該函數被定義時的名字
__CLASS__ 常量返回該類被定義時的名字(區分大小寫)。
__METHOD__ 類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
__NAMESPACE__ 當前命名空間的名稱(區分大小寫)。
面向對象和麪向過程區別
面向過程就是分析出解決問題所須要的步驟,而後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就能夠了。
面向對象是把構成問題事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲。
TCP的三次握手
TCP(Transmission Control Protocol) 傳輸控制協議
TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:
位碼即tcp標誌位,有6種標示:SYN(synchronous創建聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)
在TCP/IP協議中,TCP協議提供可靠的鏈接服務,採用三次握手創建一個鏈接。
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據.