国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

淺析虛擬主機服務器php fsockopen函數被禁用的解決辦法

2024-05-04 23:12:25
字體:
來源:轉載
供稿:網友

一、如何禁用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 = fsockopen($host, 80, $errno, $errstr, 30);
修改后:
$fp = pfsockopen($host, 80, $errno, $errstr, 30);
2、如果服務器同時禁用了pfsockopen,那么用其他函數代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的參數不同。
具體操作:搜索程序中的字符串 fsockopen( 替換為 stream_socket_client( ,然后,將原fsockopen函數中的端口參數“80”刪掉,并加到$host。示例如下
修改前:
$fp = fsockopen($host, 80, $errno, $errstr, 30);
修改后
$fp = stream_socket_client($host."80", $errno, $errstr, 30);
3、如果PHP版本低于5.0,fsockopen被禁用,又沒有stream_socket_client()怎么辦呢?自己寫一個函數實現fsockopen的功能,參考代碼:

復制代碼 代碼如下:


function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) {
 $ip = gethostbyname($host);
 $s = socket_create(AF_INET, SOCK_STREAM, 0);
 if (socket_set_nonblock($s)) {
  $r = @socket_connect($s, $ip, $port);
  if ($r || socket_last_error() == EINPROGRESS) {
   $errno = EINPROGRESS;
   return $s;
  }
 }
 $errno = socket_last_error($s);
 $errstr = socket_strerror($errno);
 socket_close($s);
 return false;
}


具體操作:1.首先找到使用fsockopen函數的代碼段,將上面代碼加至其上端,搜索該代碼段中的字符串 fsockopen( 替換為 b_fsockopen( 。
2.因為fsockopen函數返回文件指針所以可以被文件函數操作,但是這個b_fsockopen函數沒能返回文件指針,需要繼續修改代碼段:用socket_read( 替換掉 fread( ,用socket_write( 替換掉fwrite( ,用socket_close( 替換掉fclose( 。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麻阳| 木里| 新邵县| 利辛县| 磐石市| 邵阳县| 资源县| 莱西市| 信丰县| 乌海市| 勐海县| 玉屏| 招远市| 乌鲁木齐县| 屏南县| 兰州市| 朝阳县| 长岛县| 当阳市| 南岸区| 德庆县| 酒泉市| 涿鹿县| 甘孜| 定陶县| 瑞安市| 饶阳县| 内江市| 永兴县| 肇源县| 长治县| 绥阳县| 池州市| 中山市| 图木舒克市| 白城市| 辽宁省| 海伦市| 综艺| 延安市| 富宁县|