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的SQL注入实现(测试代码安全不错)
Feb 27 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
Feb 16 PHP
php tpl模板引擎定义与使用示例
Aug 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
php获取新浪微博数据API实例
2013/11/12 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
php图像生成函数之间的区别分析
2012/12/06 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
2018/05/08 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
Python监控主机是否存活并以邮件报警
2015/09/22 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Python语言描述随机梯度下降法
2018/01/04 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
详解Python3 pickle模块用法
2019/09/16 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
python 读取、写入txt文件的示例
2020/09/27 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
中英文自我评价语句
2013/12/20 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
学术会议通知
2015/04/15 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
8个JS的reduce使用实例和reduce操作方式
2021/10/05 Javascript