PHP Socket編程 之使用fsockopen()函數


Socket可以理解為兩台計算機相互通信的通道。

用法:使用fsockopen()函數

具體用法詳見上篇文章。函數的參數為URL、端口號、一個存放錯誤編號的變量、一個存放錯誤信息字符串的變量和超時等待時間。(只有第一個參數是必須的)

常見的端口表:

端口號

主要用途

21

FTP

22

SSH

23

Telnet

25

SMTP

80

Web

110

POP

其中,組成URl的幾個部分為:協議名(scheme),主機(host),端口號(port),文件路徑(path),查詢參數(query)。

當url是http://www.example.com/view.php?week=1#demo時:

指標

Scheme

http

Host

www.example.com

Port

80

User

 

Pass

 

Path

View.php

Query

Week=1

Fragment

#demo

常見的HTTP狀態碼:

代碼

含義

200

OK

204

NO Content

400

Bad Request

401

Unauthorized

403

Forbidden

404

Not Found

408

Time out

5**

Server error

【示例】:

<?PHP  
       function check_url($url){  
              //解析url  
              $url_pieces = parse_url($url);  
              //設置正確的路徑和端口號  
              $path =(isset($url_pieces['path']))?$url_pieces['path']:'/';  
              $port =(isset($url_pieces['port']))?$url_pieces['port']:'80';  
              //用fsockopen()嘗試連接  
              if($fp =fsockopen($url_pieces['host'],$port,$errno,$errstr,30)){  
                     //建立成功后,向服務器寫入數據  
                     $send = "HEAD $path HTTP/1.1\r\n";  
                     $send .= "HOST:$url_pieces['host']\r\n";  
                     $send .= "CONNECTION: CLOSE\r\n\r\n";  
                     fwrite($fp,$send);  
                     //檢索HTTP狀態碼  
                     $data = fgets($fp,128);  
                     //關閉連接  
                     fclose($fp);  
                     //返回狀態碼和類信息  
                     list($response,$code) = explode(' ',$data);  
                     if(code == 200){  
                            return array($code,'good');  
                     }else{  
                            return array($code,'bad');//數組第二個元素作為css類名  
                     }  
              }else{  
                     //沒有連接  
                     return array($errstr,'bad');  
              }  
               
       }  
       //創建URL列表  
       $urls = array(  
              'http://www.sdust.com',  
              'http://www.example.com'  
       )  
       //調整PHP腳本的時間限制:  
       set_time_limit(0);//無限長時間完成任務  
       //逐個驗證url:  
       foreach($urls as $url){  
              list($code,$class) = check_url($url);  
              echo "<p><a href =\"$url\">$url</a>(<span class =\"$class\">$code</span>)</p>";  
               
       }  
?>  

使用fsockopen()函數比fopen()函數的優點:fopen()只會在PHP中已經將allow_url_fopen設置為真時才能使用,而fsockopen()並沒有限制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM