PHP函式 fsockopen簡介

2021-07-08 15:25:47 字數 2198 閱讀 7318

開啟網路的 socket 鏈結。  

語法: resuce fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);

返回值: 資源;

函式種類: 網路系統;

內容說明:

目前這個函式提供兩個 socket 資料流介面,分別為 internet 用的 af_inet 及 unix 用的 af_unix。

在 internet 中,引數 hostname 及 port 分別代表**及埠號。

在 unix 中,引數hostname 表示到 socket 的路徑,port 配置為 0。timeout可省略表示多久沒有連

上就中斷。該函式返回檔案指標,供檔案函式使用,包括 fgets()、fgetss()、fputs()、fclose()

feof()。引數 errno 及 errstr 可省略,做錯誤處理使用。該函式使用阻塞模式 (blocking mode) 處理,

可用 set_socket_blocking() 轉換成無阻塞模式。

例項:

<?php

$fp = fsockopen("php.wilson.gs", 80, &$errno, &$errstr, 10);

if(!$fp) else

fclose($fp);

}?>

備註:fputs() 函式寫入檔案(可安全用於二進位制檔案)。fputs() 函式是 fwrite() 函式的別名。

fsockopen() — open internet or unix domain socket connection

一、如何禁用fsockopen()

下面是兩種常用的禁用fsockopen的方法。

1、修改php.ini,將 disable_functions = 後加入 fsockopen

2、修改php.ini,將 allow_url_fopen = on 改為 allow_url_fopen = off

二、如何解決fsockopen函式被禁用

1、如果伺服器沒有同時禁用pfsockopen,那麼直接將fsockopen函式替換為pfsockopen。

具體操作:搜尋程式中的字串 fsockopen( 替換為 pfsockopen(。示例如下

修改前: fp

=fso

ckop

en( host, 80, er

rno,

errstr, 30);

修改後: fp

=pfs

ocko

pen(

host, 80, er

rno,

errstr, 30);

2、如果伺服器同時禁用了pfsockopen,那麼用其他函式代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的引數不同。

具體操作:搜尋程式中的字串 fsockopen( 替換為 stream_socket_client(,然後,將原fsockopen函式中的埠引數「80」刪掉,並加到ho

st。示

例如下修

改前: fp = fsockopen(ho

st,80

, errno, $errstr, 30);

修改後 fp

=str

eams

ocke

tcli

ent(

host.」80」, er

rno,

errstr, 30);

3、如果php版本低於5.0,fsockopen被禁用,又沒有stream_socket_client()怎麼辦呢?自己寫乙個函式實現fsockopen的功能,參考**:

function

b_fsockopen

($host, $port, &$errno, &$errstr, $timeout)

} $errno = socket_last_error($s);

$errstr = socket_strerror($errno);

socket_close($s);

return

false;

}

PHP的fsockopen函式詳解

先來看看手冊是如何定義fsockopen函式的。fsockopen 開啟乙個網路連線或者乙個unix套接字連線。resource fsockopen string hostname int port 1 int errno string errstr float timeout ini get de...

php使用fsockopen實現非同步

php使用fsockopen實現非同步 parem post data post 請求引數 parem exetime 非同步任務執行時間 單位秒 parem debug 是否開啟除錯模式 function request by fsockopen url,post data array exeti...

php定時計畫任務與fsockopen持續程序例項

web伺服器執行乙個php指令碼,有時耗時很長才能返回執行結果,後面的指令碼需要等待很長一段時間才能繼續執行。如果想實現只簡單觸發耗時指令碼的執行而不等待執行結果就直接執行下一步操作,可以通過fscokopen函式來實現。php支援socket程式設計,fscokopen函式返回乙個到遠端主機連線的...