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 相关文章推荐
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
PHP设置进度条的方法
Jul 08 PHP
PHP-FPM实现性能优化
Mar 31 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
php判断数组是否为空的实例方法
May 10 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实现jQuery扩展函数
2009/10/30 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
python多线程操作实例
2014/11/21 Python
Python中用Spark模块的使用教程
2015/04/13 Python
python基于property()函数定义属性
2020/01/22 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
教师党性分析材料
2014/02/04 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
志愿者个人总结
2015/03/03 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
小学毕业感言200字
2015/07/30 职场文书
电工生产实习心得体会
2016/01/22 职场文书
如何撰写促销方案?
2019/07/05 职场文书
创业计划书之面包店
2019/09/12 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
Nginx配置https的实现
2021/11/27 Servers