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模板引擎SMARTY
Oct 09 PHP
web方式ftp
Oct 09 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
php动态函数调用方法
May 21 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
php中curl和soap方式请求服务超时问题的解决
Jun 11 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 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
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php常量详细解析
2015/10/27 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
PHP反射学习入门示例
2019/06/14 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
jquery 定位input元素的几种方法小结
2013/07/28 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
通过实践编写优雅的JavaScript代码
2019/05/30 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
python使用Berkeley DB数据库实例
2014/09/26 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
利用python画一颗心的方法示例
2017/01/31 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
Eclipse配置python默认头过程图解
2020/04/26 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
最好的商品表达自己:Cafepress
2019/09/04 全球购物
餐饮业的创业计划书范文
2013/12/26 职场文书
助学贷款贫困证明
2014/09/23 职场文书
2019年入党思想汇报
2019/03/25 职场文书
导游词之太原天龙山
2020/01/02 职场文书
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python
Python学习之os包使用教程详解
2022/03/21 Python