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五种设计模式小结
Mar 23 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
php实现的数组转xml案例分析
Sep 28 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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
杏林同学录(七)
2006/10/09 PHP
php使用curl访问https示例分享
2014/01/17 PHP
PHP实现的简单日历类
2014/11/29 PHP
php绘制一个矩形的方法
2015/01/24 PHP
详谈PHP编码转换问题
2015/07/28 PHP
PHP性能优化大全(php.ini)
2016/05/20 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
js GridView 实现自动计算操作代码
2009/03/25 Javascript
详解ECMAScript6入门--Class对象
2017/04/27 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
解决webpack多页面内存溢出的方法示例
2019/10/08 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
django 解决自定义序列化返回处理数据为null的问题
2020/05/20 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
市场部业务员岗位职责
2014/04/02 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
北京青年观后感
2015/06/15 职场文书
房产证明范本
2015/06/19 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
春季运动会加油词
2015/07/18 职场文书
医学会议开幕词
2016/03/03 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
Python常遇到的错误和异常
2021/11/02 Python
Nginx利用Logrotate实现日志分割
2022/05/20 Servers