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使用者状态管理功能的应用
Oct 09 PHP
PHP 函数学习简单小结
Jul 08 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
Jun 07 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
Oct 14 PHP
php自动获取关键字的方法
Jan 06 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
Yii2实现自定义独立验证器的方法
May 05 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 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解析URL函数parse_url和parse_str
2014/11/11 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Django实现文件上传和下载功能
2019/10/06 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Pycharm的Available Packages为空的解决方法
2020/09/18 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
编辑找工作求职信范文
2013/12/16 职场文书
演讲稿怎么写
2014/01/07 职场文书
建筑项目策划书
2014/01/13 职场文书
《尊严》教学反思
2014/02/11 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
见义勇为事迹材料
2014/12/24 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书