浅析虚拟主机服务器php fsockopen函数被禁用的解决办法


Posted in PHP onAugust 07, 2013

一、如何禁用fsockopen()
下面是两种常用的禁用fsockopen的方法。
1、修改php.ini,将 disable_functions = 后加入 fsockopen
2、修改php.ini,将 allow_url_fopen = On 改为 allow_url_fopen = Off

二、如何解决fsockopen函数被禁用
1、如果服务器没有同时禁用pfsockopen,那么直接将fsockopen函数替换为pfsockopen。
具体操作:搜索程序中的字符串 fsockopen( 替换为 pfsockopen( 。示例如下
修改前:
$fp = fsockopen($host, 80, $errno, $errstr, 30);
修改后:
$fp = pfsockopen($host, 80, $errno, $errstr, 30);
2、如果服务器同时禁用了pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。
具体操作:搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。示例如下
修改前:
$fp = fsockopen($host, 80, $errno, $errstr, 30);
修改后
$fp = stream_socket_client($host."80", $errno, $errstr, 30);
3、如果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(
PHP 相关文章推荐
一周学会PHP(视频)Http下载
Dec 12 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
php的XML文件解释类应用实例
Sep 22 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
php curl批处理实现可控并发异步操作示例
May 09 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 #PHP
一个漂亮的php验证码类(分享)
Aug 06 #PHP
如何在php中正确的使用json
Aug 06 #PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 #PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 #PHP
解析php中如何调用用户自定义函数
Aug 06 #PHP
使用php实现截取指定长度
Aug 06 #PHP
You might like
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
在html页面中包含共享页面的方法
2008/10/24 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
python获取从命令行输入数字的方法
2015/04/29 Python
python实现爬取图书封面
2018/07/05 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
python机器人运动范围问题的解答
2019/04/29 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
怎样声明接口
2014/09/19 面试题
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
管理学院毕业生自荐信范文
2014/03/10 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
《叶问2》观后感
2015/06/15 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书