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 Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
set_include_path和get_include_path使用及注意事项
Feb 02 PHP
php动态生成函数示例
Mar 21 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
PHP模板解析类实例
Jul 09 PHP
php制作简单模版引擎
Apr 07 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 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
星际实力自我测试
2020/03/04 星际争霸
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
2013/06/25 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
深入浅析php json 格式控制
2015/12/24 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
php命令行模式代码实例详解
2021/02/26 PHP
jquery iframe操作详细解析
2013/11/20 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Python实现去除代码前行号的方法
2015/03/10 Python
在Python中处理时间之clock()方法的使用
2015/05/22 Python
Python中int()函数的用法浅析
2017/10/17 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
公务员诚信承诺书
2014/05/26 职场文书
音乐节策划方案
2014/06/09 职场文书
商铺门前三包责任书
2014/07/25 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
学校运动会简讯
2015/07/20 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android
MySQL事务的隔离级别详情
2022/07/15 MySQL