不同的PHP基礎知識彙總

clipboard.png

前言

整理了一些關於PHP相關的基礎。請你們隨意摘看。php

通訊協議

網絡通訊協議是一種網絡通用語言,爲鏈接不一樣操做系統和不一樣硬件體系結構的互聯網絡引提供通訊支持,是一種網絡通用語言。

應用層

名稱 註釋
HTTP Hypertext Transfer Protocol 超文本傳輸協議,顯示網頁
DNS Domain Name System 域名系統
FTP File Transfer Protocol 文件傳輸協議
SFTP SSH File Transfer Protocol 安全文件傳送協議
SSH Secure Shell

通訊層

名稱 註釋
TCP Transmission Control Protocol 三次握手傳輸協議
UDP

網絡層

名稱 註釋
IP Internet Protocol
ICMP Internet Control Message Protocol,主要用於路由發送錯誤報告

HTTP

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它的發展是萬維網協會(World Wide Web Consortium)和Internet工做小組IETF(Internet Engineering Task Force)合做的結果,(他們)最終發佈了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天廣泛使用的一個版本——HTTP 1.1。html

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。nginx

HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。程序員

在TCP/IP協議棧中的位置

HTTP協議一般承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了咱們常說的HTTPS。以下圖所示web

clipboard.png

默認HTTP的端口號爲80,HTTPS的端口號爲443。apache

HTTP的請求響應模型

HTTP協議永遠都是客戶端發起請求,服務器回送響應。見下圖編程

clipboard.png

這樣就限制了使用HTTP協議,沒法實如今客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP協議是一個無狀態的協議,同一個客戶端的此次請求和上次請求是沒有對應關係。瀏覽器

HTTP Request

客戶端發送一個HTTP請求到服務器的請求消息包括如下格式安全

  • 請求行(request line)
  • 請求頭部(header)
  • 空行和請求數據四個部分組成。

Get請求例子服務器

GET /562f25980001b1b106000338.jpg HTTP/1.1Host img.mukewang.comUser-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36Accept image/webp,image/*,*/*;q=0.8Referer http://www.imooc.com/Accept-Encoding gzip, deflate, sdchAccept-Language zh-CN,zh;q=0.8

POST請求例子

POST / HTTP1.1Host:www.wrox.comUser-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)Content-Type:application/x-www-form-urlencodedContent-Length:40Connection: Keep-Alivename=Professional%20Ajax&publisher=Wiley

第一部分:請求行,第一行顯示請求類型,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請求數據,第八行。

HTTP Response

通常狀況下,服務器接收並處理客戶端發過來的請求後會返回一個HTTP的響應消息。
HTTP響應也由四個部分組成

  • 狀態行
  • 消息報頭
  • 空行和響應正文。
HTTP/1.1 200 OKDate: Fri, 22 May 2009 06:07:21 GMTContent-Type: text/html; charset=UTF-8<html><head></head><body><!--body goes here--></body></html>

第一部分狀態行 : 由HTTP協議版本號、狀態碼、狀態消息三部分組成。
第二部分消息報頭 : 用來講明客戶端要使用的一些附加信息
第三部分空行 : 消息報頭後面的空行是必須的
第四部分響應正文 : 服務器返回給客戶端的文本信息。

HTTP 狀態碼

狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別

狀態 註釋
1xx 指示信息--表示請求已接收,繼續處理
2xx 成功--表示請求已被成功接收、理解、接受
3xx 重定向--要完成請求必須進行更進一步的操做
4xx 客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx 服務器端錯誤--服務器未能實現合法的請求

進程與線程

進程的概念是操做系統的結構的基礎。Multics的設計者在20世紀60年代首次使用了這個技術詞語,它比做業更通用一些。關於進程的定義,以下所示

  • 一個正在執行的程序。
  • 計算機中正在運行的程序的一個實例。
  • 能夠分配給處理器並由處理器執行的一個實體。
  • 由單一的順序的執行線程、一個當前狀態和一組相關的系統資源所描述的活動單元。

爲何設計了進程?

設計出一個可以協調各類不一樣活動的系統軟件是很是困難的。

在任什麼時候刻都有許多做業在運行中,每一個做業都包括要求按照順序執行的不少步驟,所以分析時間的序列組合是不可的。因爲缺少可以在全部活動中進行協調和合做的系統級的方法,程序員只能基於他們對操做系統所控制的環境的理解,採用本身的特殊方法。然而這種方法是很脆弱的,尤爲對於一些程序設計中的小錯誤,由於這些錯誤只有在不多見的時間序列發生時纔會出現。

因爲須要從應用程序軟件錯誤和硬件錯誤中區分出這些錯誤,於是診斷工做是很困難的。及時檢測出錯誤,也很難肯定緣由,由於很難在線錯誤產生的精確場景。通常而言,產生這類錯誤的4個主要緣由以下:

  • 不正確同步
  • 失敗互斥。
  • 不肯定的程序操做
  • 死鎖

解決這些問題須要一種系統級別的方法監控處理器中不一樣程序的執行。進程的概念爲此提供了基礎。

所以進程能夠看作是由三部分組成的

  • 一段能夠執行的程序
  • 程序所須要的相關數據
  • 程序的執行上下文

進程的建立

傳統地,操做系統建立進程的方式對用戶和應用程序都是透明的,這在當代操做系統中也很廣泛。可是容許一個進程引起另外一個進程的建立將是頗有用的。

例如一個程序進程能夠產生另外一個進程,以接受應用程序產生的數據,並將數據組織成適合之後分析的格式。新進程與應用程序並行的運行,並當獲得新的數據時被激活。

這個方案對於構造應用程序是很是有用的,例如,服務器進程(如打印服務器、文件服務器)能夠爲它處理的每一個請求產生一個新進程。當操做系統爲另外一個進程的顯式請求產生一個新進程時,這個動做稱爲進程派生。

當一個進程派生另外一個進程時,前一個稱做父進程,被派生的進程稱做子進程。在典型的狀況下,相關進程須要像話之間通訊和合做。對程序員來講,合做是一個很是困難的任務。

什麼是線程

線程是進程的一個執行流,線程不能分配系統資源,它是進程的一部分,比進程更小的獨立運行的單位

進程和線程的關係

進程就像地主,有土地(系統資源),線程就像佃戶(線程,執行種地流程)。每一個地主(進程)只要有一個幹活的佃戶(線程)。

進程-資源分配的最小單位,相對健壯,崩潰通常不影響其餘進程,可是切換進程時耗費資源,效率差些。

線程-程序執行的最小單位,沒有獨立的地址空間,一個線程死掉可能整個進程就死掉,可是節省資源,切換效率高。

PHP常見的進程和線程

  • 在web應用中,咱們每次訪問php,就創建一個PHP進程,固然也會創建至少一個PHP線程
  • PHP使用pcntl來進行多進程編程
  • PHP中使用pthreads來進行多線程編程
  • nginx的每一個進程只有一個線程,每一個線程能夠處理多個客戶端的訪問
  • php-fpm使用多進程模型,每一個進程只有一個線程,每一個線程只能處理一個客戶端訪問
  • apache可能使用多進程模型,也可能使用多線程模型,取決於使用哪一種SAPI

致謝

感謝你看到這裏,有時一些底層的知識會對平常開發起到很大的做用,去理解它,並不是完全瞭解它。有什麼問題可在評論區留言,謝謝

相關文章
相關標籤/搜索