fsockopen --- 開啟Internet或Unix網域socket連結
語法 : int fsockopen (string [udp://]hostname, int port [, int errno [, string errstr [, double timeout]]])
說明 :
創始一個Internet或是Unix網域中的資料流連結(AF_INET,使用 TCP 或 UDP)。Internet網域,它將會開啟一個TCP socket連結到參數hostname,埠號為參數port,參數hostname可以是網域名稱或是IP位址。UDP連結,你需要明確的指出協定 : udp://hostname。Unix網域,參數hostname將會使用連結到socket的路徑,參數port必須設為0。非必需選項timeout可用來設定停止連結系統呼叫的秒數。
fsockopen( )傳回一個檔案指標,這可以和其它的函式一起使用,例如 : fgets( )、fgetss( )、fputs( )、fclose( )、feof( )。
如果呼叫失敗,它將會傳回false並且如果有給予參數errno和errstr,它們將會指出發生在system-level connect( ) 呼叫的錯誤。如果傳回的errno為0而且此函式傳回false,表示錯誤發生在connect( )呼叫之前,注意 : 參數errno和errstr必須依照關係傳遞。
此函式會預設成擱置模式,您可使用set_socket_blocking( )設定成無擱置模式。
Example :
<?php
$fp = fsockopen ("www.php.net", 80, &$errno, &$errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}
?>
以下的範例顯示如何在你的機器上從UDP服務"daytime"(port 13)獲得日期和時間。
<?php
$fp = fsockopen("udp://127.0.0.1", 13, &$errno, &$errstr);
if (!$fp) {
echo "ERROR: $errno - $errstr<br>\n";
} else {
fwrite($fp,"\n");
echo fread($fp, 26);
fclose($fp);
}
?>
參考 : pfsockopen( )