php socket和curl的不同之處:1、socket是一種資料結構,可以用來在伺服器和客戶端進行對話;2、curl是利用url語法規定來傳輸檔案和資料的規定,支援很多協議,例如FTP、HTTP、TELNET等。
本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦
php socket和curl有什麼不同?
php的curl和socket的區別
PHP使用berkely的socket庫來創建他的連線,socket是一個資料結果,你可以透過這個socket來開啟伺服器和客戶端的會話。伺服器端一直處於監聽狀態,當一個客戶端連接伺服器,他就打開伺服器端正在監聽的一個連接埠進行會話。這時伺服器端接收客戶端的連線請求,那麼就進行一次循環。現在這個客戶端就能夠傳送訊息到伺服器,伺服器也可以傳送訊息給客戶端。
產生一個socket你一共需要三個變數:
1、一個協定
2、一個socket型別
3、一個公用協定類型
以下是這三個變數的詳細解釋,大概了解下吧(但願你能記得住偷笑)
協議:產生一個socket有三個協議供選擇:
1、AF_INET 這個是使用比較廣泛的產生socket的協議,使用tcp或udp協定傳輸,使用ipv4位址
2、AF_INET6 顯而易見見哈,同上,不同的是使用ipv6位址
3、AF_UNIX 使用在unix或Linux機器上,這個很少使用,僅在伺服器端和客戶端均為unix或linux系統上使用。
socket類型:
1、SOCK_STREAM 這個協定是依照順序的、可靠的、資料完整的基於位元組流的連結。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。
2、SOCK_DGRAM 這個協定是無連線的、固定長度的傳輸呼叫。該協定是不可靠的,使用UDP來進行它的連接。
3、SOCK_SEQPACKET 這個協定是雙線路的、可靠的連接,發送固定長度的封包進行傳輸。必須把這個包完整的接受才能進行讀取。
4、SOCK_RAW 這個socket類型提供單一的網路訪問,這個socket類型使用ICMP公共協定。 (ping、traceroute使用該協定)
5、SOCK_RDM 這個類型是很少使用的,在大部分的作業系統上沒有實現,它是提供給資料鏈結層使用,不保證資料包的順序
公共協定類型:
1、ICMP (Internet Control Message Protocol)互聯網控制封包協議,主要用在網關和主機上,用來偵測網路狀況和報告錯誤訊息
2、TCP ( Transmission Control Protocol) 傳輸控制協議,他是使用最廣泛的協議,他能夠保證資料包到達接收者那裡,如果中途出現錯誤,那麼此協議從新發送資料包。
3、UDP (User Datagram Protocol)用戶資料包協議,他是無連接的,不可靠的資料傳輸協議。
好啦,你現在知道了產生一個socke需要三個元素,那麼在php中socket_create()就需要三個參數,一個協議,一個socket類型,一個公共協議。如果創建成功,socket_create()返回一個socket資源類型,如果不成功,嘿嘿,那你會收到一個false.
cURL 是利用URL語法規定來傳輸文件和數據的工具。他支援HTTP、FTP、TELNET。
為啥要使用cURL呢?
因為,如果我們有時候想靈活的取得網頁上的內容,例如處理coockies、驗證、表單提交、文件上傳等等等等。那你就需要用到cURL.據說php有著功能強大的cURL函式庫(因為偶也說不清強大在哪裡啦,所以用了「據說」大笑)。
php使用cURL的選項基本步驟如下:
1、初始化
2、參數設定
3、頁面內容取得或操作
4、釋放句柄
看看下面這個簡單的例子吧。
<?php //初始化curl $ch = curl_init (); /* * 设置curl * php手册对于curl_setopt的解释为:设置对于curl传输的操作 * curl_setopt有三个参数:资源(一般为你建立的curl句柄)、操作(你将对这个句柄作何操作)、参数(对于这个操作你给出的参数) */ //例如你想对百度进行某些操作 curl_setopt ( $ch, CURLOPT_URL, "http://www.baidu.com"); //现在看来你要向百度post数据 curl_setopt ( $ch, CURLOPT_POST, 1 ); /*给出了要post的数据:$post_string,post的数据可以是一个文件, *那么你需要以@加上文件的全路径给出,或者你要post一些数据, *那么你可以按照数组形式给出,或者按照字符串给出, *如果你想按照字符串形式给出,请把字符串urlencode,嘿嘿 */ curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_string ); /* *把curl操作的结果以字符串形式 从curl_exec ()返回,而不是直接就输出了 */ curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); //得到操作返回结果 $result = curl_exec ( $ch ); //关闭curl句柄 curl_close ( $ch );
因為php的curl有很多操作,要都記得估計很困難,反正偶記不住啦,說些大家可能用的上的吧。
取得伺服器的一些資訊
<?php //初始化curl $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, "http://www.baidu.com"); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); curl_exec($ch); $info = curl_getinfo($ch); var_dump($info);
透過上面的例子,你將會得到以下資訊:
“url” //資源網路位址
“content_type” //內容編碼
“http_code” //HTTP狀態碼
“header_size” //header的大小
“request_size” / /請求的大小
“filetime” //檔案建立時間
“ssl_verify_result” //SSL驗證結果
“redirect_count” //跳轉技術
“total_time” //總耗時
“namelookup_time” //DNS查詢耗時
“connect_time” //等待連線耗時
“pretransfer_time” //傳輸前準備耗時
“size_upload” //上傳資料的大小
“size_download” //下載資料的大小
“speed_download” //下載速度
“speed_upload” //上傳速度
“download_content_length”//下載內容的長度
“upload_content_length” //上傳內容的長度
“starttransfer_time” //開始傳輸的時間
“redirect_time”//重定向耗時
利用curl你還可以做以下操作:
#1.模擬頁面的post操作
2.檔案上傳
3.HTTP 認證
4.FTP 上傳
5.FQ術
6.回呼函數
ps:
以上關於curl的大前提是你的php在安裝編譯時加了--with-curlwrappers ,你可以透過phpinfo()操作來查看你是不是在編譯時加了這個擴充函式庫。
如果載入了這個擴展,你將能看見類似:
如果你沒有這個擴展,你需要改一下php.ini文件,去掉extension=php_curl. dll前面的分號。
好啦,現在我們知道socket和curl是咋回事了,socket是一種資料結構,他可以用來在伺服器和客戶端進行對話。而curl是利用url語法規定來傳輸檔案和資料的規定,支援許多協議,例如FTP,HTTP、TELNET等。
推薦學習:《PHP影片教學》
以上是php socket和curl有什麼不同的詳細內容。更多資訊請關注PHP中文網其他相關文章!