首頁  >  文章  >  後端開發  >  php socket和curl有什麼不同

php socket和curl有什麼不同

藏色散人
藏色散人原創
2021-10-27 10:28:122099瀏覽

php socket和curl的不同之處:1、socket是一種資料結構,可以用來在伺服器和客戶端進行對話;2、curl是利用url語法規定來傳輸檔案和資料的規定,支援很多協議,例如FTP、HTTP、TELNET等。

php socket和curl有什麼不同

本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦

php socket和curl有什麼不同?

php的curl和socket的區別

首先說下啥是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

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn