yxhxj2006

          常用鏈接

          統計

          最新評論

          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] 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);  
          ?>  

          通過上面的例子,你將會獲得如下信息:
          “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你還可以做以下操作:
          模擬頁面的post操作
          文件上傳
          HTTP 認證
          FTP 上傳
          回調函數
          以上關于curl的大前提是你的php在安裝編譯時加了 --with-curlwrappers ,你可以通過phpinfo()操作來查看你是不是在編譯時加了這個擴展庫。
          如果加載了這個擴展,你將能看見類似:
          如果你沒有這個擴展,你需要改一下php.ini文件,去掉extension=php_curl.dll前面的分號。
          好啦,現在我們知道socket和curl是咋回事了,socket是一種數據結構,他可以用來在服務器和客戶端進行對話。而curl是利用url語法規定來傳輸文件和數據的規定,支持很多協議,例如FTP,HTTP、TELNET等。

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 静乐县| 阳曲县| 淮安市| 万荣县| 托克托县| 新巴尔虎右旗| 渝中区| 新昌县| 冷水江市| 韩城市| 玛多县| 法库县| 土默特左旗| 清原| 忻州市| 正定县| 阳城县| 兖州市| 渝中区| 甘洛县| 南雄市| 漳州市| 沙河市| 武功县| 宁津县| 渑池县| 专栏| 兰州市| 项城市| 阿尔山市| 墨竹工卡县| 彭山县| 东乌珠穆沁旗| 涞源县| 周宁县| 喜德县| 大荔县| 阜新市| 丽水市| 孟津县| 马山县|