yxhxj2006

          常用鏈接

          統(tǒng)計(jì)

          最新評(píng)論

          php的curl和socket的區(qū)別

          首先說下啥是socket:
                 php使用berkely的socket庫來創(chuàng)建他的連接,socket是一個(gè)數(shù)據(jù)結(jié)果,你可以通過這個(gè)socket來開啟服務(wù)器和客戶端的會(huì)話。服務(wù)器端一直處于監(jiān)聽狀態(tài),當(dāng)一個(gè)客戶端連接服務(wù)器,他就打開服務(wù)器端正在監(jiān)聽的一個(gè)端口進(jìn)行會(huì)話。這時(shí)服務(wù)器端接收客戶端的連接請(qǐng)求,那么就進(jìn)行一次循環(huán)。現(xiàn)在這個(gè)客戶端就能夠發(fā)送信息到服務(wù)器,服務(wù)器也可以發(fā)送信息給客戶端。
                產(chǎn)生一個(gè)socket你一共需要三個(gè)變量:
               1、一個(gè)協(xié)議
               2、一個(gè)socket類型
               3、一個(gè)公共協(xié)議類型
               以下是對(duì)這三個(gè)變量的詳細(xì)解釋,大概了解下吧
               協(xié)議:產(chǎn)生一個(gè)socket有三個(gè)協(xié)議供選擇:
              1、AF_INET  這個(gè)是使用比較廣泛的產(chǎn)生socket的協(xié)議,使用tcp或者udp協(xié)議傳輸,使用ipv4地址
              2、AF_INET6 顯而易見哈,同上,不同的是使用ipv6地址
              3、AF_UNIX  使用在unix或者linux機(jī)器上,這個(gè)很少使用,僅在服務(wù)器端和客戶端均為unix或者linux系統(tǒng)上使用。
             
               socket類型:
               1、SOCK_STREAM  這個(gè)協(xié)議是按照順序的、可靠的、數(shù)據(jù)完整的基于字節(jié)流的連接。這是一個(gè)使用最多的socket類型,這個(gè)socket是使用TCP來進(jìn)行傳輸。
               2、SOCK_DGRAM  這個(gè)協(xié)議是無連接的、固定長度的傳輸調(diào)用。該協(xié)議是不可靠的,使用UDP來進(jìn)行它的連接。
               3、SOCK_SEQPACKET  這個(gè)協(xié)議是雙線路的、可靠的連接,發(fā)送固定長度的數(shù)據(jù)包進(jìn)行傳輸。必須把這個(gè)包完整的接受才能進(jìn)行讀取。
               4、SOCK_RAW  這個(gè)socket類型提供單一的網(wǎng)絡(luò)訪問,這個(gè)socket類型使用ICMP公共協(xié)議。(ping、traceroute使用該協(xié)議)
               5、SOCK_RDM  這個(gè)類型是很少使用的,在大部分的操作系統(tǒng)上沒有實(shí)現(xiàn),它是提供給數(shù)據(jù)鏈路層使用,不保證數(shù)據(jù)包的順序
               
               公共協(xié)議類型:
              1、ICMP (Internet Control Message Protocol)互聯(lián)網(wǎng)控制報(bào)文協(xié)議,主要用在網(wǎng)關(guān)和主機(jī)上,用來檢測(cè)網(wǎng)絡(luò)狀況和報(bào)告錯(cuò)誤信息
              2、TCP  (Transmission Control Protocol) 傳輸控制協(xié)議,他是使用最廣泛的協(xié)議,他能夠保證數(shù)據(jù)包到達(dá)接收者那里,如果中途出現(xiàn)錯(cuò)誤,那么此協(xié)議從新發(fā)送數(shù)據(jù)包。
             3、UDP   (User Datagram Protocol)用戶數(shù)據(jù)包協(xié)議,他是無連接的,不可靠的數(shù)據(jù)傳輸協(xié)議。

             好啦,你現(xiàn)在知道了產(chǎn)生一個(gè)socke需要三個(gè)元素,那么在php中socket_create()就需要三個(gè)參數(shù),一個(gè)協(xié)議,一個(gè)socket類型,一個(gè)公共協(xié)議。如果創(chuàng)建成功,socket_create()返回一個(gè)socket資源類型,如果不成功,嘿嘿,那你會(huì)收到一個(gè)false.
              
          CURL
          cURL  是利用URL語法規(guī)定來傳輸文件和數(shù)據(jù)的工具。他支持HTTP、FTP、TELNET。
              為啥要使用cURL呢?
             因?yàn)椋绻覀冇袝r(shí)候想靈活的獲取網(wǎng)頁上的內(nèi)容,例如處理coockies、驗(yàn)證、表單提交、文件上傳等等等等。那么你就需要用到cURL.據(jù)說php有著功能強(qiáng)大的cURL庫(因?yàn)榕家舱f不清強(qiáng)大在哪里啦,
              php使用cURL的選項(xiàng)基本步驟如下:
              1、初始化
              2、參數(shù)設(shè)置
              3、頁面內(nèi)容獲取或者操作
              4、釋放句柄

          看看下面這個(gè)簡單的例子吧。
          <?php  
          //初始化curl  
          $ch = curl_init ();  
          /* 
           * 設(shè)置curl 
           * php手冊(cè)對(duì)于curl_setopt的解釋為:設(shè)置對(duì)于curl傳輸?shù)牟僮?nbsp;
           * curl_setopt有三個(gè)參數(shù):資源(一般為你建立的curl句柄)、操作(你將對(duì)這個(gè)句柄作何操作)、參數(shù)(對(duì)于這個(gè)操作你給出的參數(shù)) 
           
          */  
          //例如你想對(duì)百度進(jìn)行某些操作  
          curl_setopt ( $ch, CURLOPT_URL, "http://www.baidu.com");  
          //現(xiàn)在看來你要向百度post數(shù)據(jù)  
          curl_setopt ( $ch, CURLOPT_POST, 1 );  
          /*給出了要post的數(shù)據(jù):$post_string,post的數(shù)據(jù)可以是一個(gè)文件, 
          *那么你需要以@加上文件的全路徑給出,或者你要post一些數(shù)據(jù), 
          *那么你可以按照數(shù)組形式給出,或者按照字符串給出, 
          *如果你想按照字符串形式給出,請(qǐng)把字符串urlencode,嘿嘿 
          */  
          curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_string );  
          /* 
           *把curl操作的結(jié)果以字符串形式 從curl_exec ()返回,而不是直接就輸出了 
           
          */  
          curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );  
          //得到操作返回結(jié)果  
          $result = curl_exec ( $ch );  
          //關(guān)閉curl句柄  
          curl_close ( $ch );   
          ?>  
          因?yàn)閜hp的curl有很多操作,要都記住估計(jì)很困難,反正偶記不住啦,說些大家可能用的上的吧。大笑
          獲取服務(wù)器的一些信息
          [php] view plaincopy
          <?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);  
          ?>  

          通過上面的例子,你將會(huì)獲得如下信息:
          “url” //資源網(wǎng)絡(luò)地址
          “content_type” //內(nèi)容編碼
          “http_code” //HTTP狀態(tài)碼
          “header_size” //header的大小
          “request_size” //請(qǐng)求的大小
          “filetime” //文件創(chuàng)建時(shí)間
          “ssl_verify_result” //SSL驗(yàn)證結(jié)果
          “redirect_count” //跳轉(zhuǎn)技術(shù)  
          “total_time” //總耗時(shí)
          “namelookup_time” //DNS查詢耗時(shí)
          “connect_time” //等待連接耗時(shí)
          “pretransfer_time” //傳輸前準(zhǔn)備耗時(shí)
          “size_upload” //上傳數(shù)據(jù)的大小
          “size_download” //下載數(shù)據(jù)的大小
          “speed_download” //下載速度
          “speed_upload” //上傳速度
          “download_content_length”//下載內(nèi)容的長度
          “upload_content_length” //上傳內(nèi)容的長度  
          “starttransfer_time” //開始傳輸?shù)臅r(shí)間
          “redirect_time”//重定向耗時(shí)

          利用curl你還可以做以下操作:
          模擬頁面的post操作
          文件上傳
          HTTP 認(rèn)證
          FTP 上傳
          回調(diào)函數(shù)
          以上關(guān)于curl的大前提是你的php在安裝編譯時(shí)加了 --with-curlwrappers ,你可以通過phpinfo()操作來查看你是不是在編譯時(shí)加了這個(gè)擴(kuò)展庫。
          如果加載了這個(gè)擴(kuò)展,你將能看見類似:
          如果你沒有這個(gè)擴(kuò)展,你需要改一下php.ini文件,去掉extension=php_curl.dll前面的分號(hào)。
          好啦,現(xiàn)在我們知道socket和curl是咋回事了,socket是一種數(shù)據(jù)結(jié)構(gòu),他可以用來在服務(wù)器和客戶端進(jìn)行對(duì)話。而curl是利用url語法規(guī)定來傳輸文件和數(shù)據(jù)的規(guī)定,支持很多協(xié)議,例如FTP,HTTP、TELNET等。

          posted on 2014-12-31 19:03 奮斗成就男人 閱讀(510) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 亳州市| 通道| 南木林县| 隆回县| 兴文县| 盐亭县| 巨野县| 南昌县| 德格县| 涿州市| 诸城市| 盐亭县| 名山县| 杭锦旗| 开原市| 厦门市| 肇源县| 新巴尔虎右旗| 通化县| 沛县| 松潘县| 阿克苏市| 抚州市| 康平县| 金坛市| 长岭县| 天气| 琼中| 临澧县| 苏州市| 西藏| 石棉县| 清原| 南雄市| 金塔县| 白山市| 屯昌县| 都安| 珲春市| 城步| 黄陵县|