始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

虚拟主机php程序fsockopen函数被禁用

发布时间:  2014/8/15 10:42:47
在PHP程序中fsockopen是一个功能比较强大的函数,大多数虚拟主机是禁用这个方法的。因为网站太多垃圾评论,打开了Akismet,当时开启Akismet后发现效果还行,也没太仔细看Akismet的相关设置,后来点进去看一下发现Akismet的服务器连接状态显示网络功能被禁用。

您的主机似乎禁用了PHP的fsockopen或gethostbynamel函数。在此问题修复之前,Akismet无法工作。请联系您的主机服务管理员或防火墙管理员,并向他们提供Akismet的运行环境要求。

通过检查在空间上运行phpinfo()方法,发现虚拟主机确实禁用了fsockopen方法,咋办呢。
检查虚拟主机根目录(不是wwwroot目录)下的php.ini文件,打开,查找allow_url_fopen
allow_url_fopen = On
这是正确的,此行配置是指允许访问网络文件,如果是Off,请改为On
接着找disable_functions,找到
disable_functions = fsockopen
好,找到问题,这行配置禁用了fsockopen方法,删掉或者注释掉此行代码。(注释方法,行首加“;”号)
修改配置后,重新检查Akismet配置,网络接连正常。


如果无法修改php.ini文件,或者修改无效,可参考以下方法。

一、如果只禁用了fsockopen,而没有禁用pfsockopen方法可将所有用到fsockopen方法的地方修改为使用pfsockopen,如果是插件调用,那只能通过修改插件的代码来搞定了。
二、如果服务器同时还禁用了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);
三,如果你十分十分的不幸,fsockopen和pfsockopen方法都被禁用,并且你的php版本低于5.0时,没有stream_socket_client方法,那你只有自己手动写一个了。
参考代码:
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()。
本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      0
     
     
     
     

    0371-60135900
    7*24小时客服服务热线