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 Zip压缩 在线对文件进行压缩的函数
May 26 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP的反射机制实例详解
Mar 29 PHP
Laravel中的Auth模块详解
Aug 17 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
Dec 07 PHP
Laravel 自带的Auth验证登录方法
Sep 30 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产生动态的影像图
2006/10/09 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
2013/06/26 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
五种js判断是否为整数类型方式
2015/12/03 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
python实现socket端口重定向示例
2014/02/10 Python
python django集成cas验证系统
2014/07/14 Python
python中global用法实例分析
2015/04/30 Python
python生成器表达式和列表解析
2016/03/10 Python
python中异常报错处理方法汇总
2016/11/20 Python
Django中url的反向查询的方法
2018/03/14 Python
Python3中的json模块使用详解
2018/05/05 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
python字符串反转的四种方法详解
2019/12/02 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
phpquery中文手册
2021/03/18 PHP
百思买美国官网:Best Buy
2016/07/28 全球购物
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
初中三年毕业生的自我评价分享
2014/02/14 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
反邪教标语
2014/06/23 职场文书
机关工会工作总结2015
2015/05/26 职场文书