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.NET的入门教程
Oct 09 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
简单的cookie计数器实现源码
Jun 07 PHP
smarty实现多级分类的方法
Dec 05 PHP
php按单词截取字符串的方法
Apr 07 PHP
PHP中each与list用法分析
Jan 08 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
Feb 25 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
PHP Mysql编程之高级技巧
2008/08/27 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
PHP使用ActiveMQ实现消息队列的方法详解
2019/05/31 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
Vue项目history模式下微信分享爬坑总结
2019/03/29 Javascript
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
python实现KNN分类算法
2019/10/16 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
销售人员中英文自荐信
2013/09/22 职场文书
小区门卫值班制度
2014/01/24 职场文书
校园文化建设方案
2014/02/03 职场文书
公务员年终个人总结
2015/02/12 职场文书
元旦晚会开场白
2015/05/29 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
Golang ort 中的sortInts 方法
2022/04/24 Golang