浅析虚拟主机服务器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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
帝国cms常用标签汇总
Jul 06 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
PHP获取客户端及服务器端IP的封装类
Jul 21 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
Laravel定时任务的每秒执行代码
Oct 22 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大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php中adodbzip类实例
2014/12/08 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
详解Django框架中的视图级缓存
2015/07/23 Python
python中 logging的使用详解
2017/10/25 Python
详解python配置虚拟环境
2019/04/08 Python
python绘制直方图和密度图的实例
2019/07/08 Python
python视频按帧截取图片工具
2019/07/23 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
培训主管的岗位职责
2013/11/23 职场文书
初中同学会活动方案
2014/08/22 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
关于运动会的广播稿50字
2014/10/17 职场文书
公务员政审个人总结
2015/02/12 职场文书
物业公司管理制度
2015/08/05 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
python脚本框架webpy的url映射详解
2021/11/20 Python