PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法


Posted in PHP onJuly 08, 2014

也许fsockopen、pfsockopen函数的确存在着安全的隐患,但是我们却已经无从考证,这都是IDC商说的,不管是什么原因吧,反正他们是把这两个函数禁用了,那么如何解决呢,下面是小编整理的方法,希望对用到的同学有一定的参考。

解决方法如下:

一、使用stream_socket_client()替代

服务器同时禁用了fsockopen、pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。  

具体操作:

搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。   

示例如下:

修改前:

$fp = fsockopen($host, 80, $errno, $errstr, 30);

$fp = fsockopen($host, $port, $errno, $errstr, $connection_timeout);

修改后:

$fp = stream_socket_client(“tcp://”.$host.”80″, $errno, $errstr, 30);

$fp = stream_socket_client(“tcp://”.$host.”:”.$port, $errno, $errstr, $connection_timeout);

二、重写法

如果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( 。

以上的方法中,我用stream_socket_client()替代问题解决,第二个方法没有去试。

PHP 相关文章推荐
PHP生成静态页
Nov 25 PHP
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
php&mysql 日期操作小记
Feb 27 PHP
初识PHP
Sep 28 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
php实现转换ubb代码的方法
Jun 18 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
PHP.vs.JAVA
Apr 29 PHP
php中实现进程锁与多进程的方法
Sep 18 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
php中函数前加&符号的作用分解
Jul 08 #PHP
PHP实现的连贯操作、链式操作实例
Jul 08 #PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 #PHP
PHP的魔术常量__METHOD__简介
Jul 08 #PHP
PHP中的插件机制原理和实例
Jul 08 #PHP
phpmailer在服务器上不能正常发送邮件的解决办法
Jul 08 #PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 #PHP
You might like
打造计数器DIY三步曲(上)
2006/10/09 PHP
PHP中的日期及时间
2006/11/23 PHP
windows xp下安装pear
2006/12/02 PHP
php 前一天或后一天的日期
2008/06/28 PHP
PHP 编写的 25个游戏脚本
2009/05/11 PHP
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python装饰器decorator介绍
2014/11/21 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
最新大学生创业计划书写作攻略
2014/04/02 职场文书
2014年妇联工作总结
2014/11/21 职场文书
2014年文秘工作总结
2014/11/25 职场文书
招标保密承诺书
2015/01/20 职场文书
公证处委托书
2015/01/28 职场文书
介绍信怎么写
2015/01/30 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android