浅析虚拟主机服务器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程序中的常见漏洞进行攻击(上)
Oct 09 PHP
PHP教程 变量定义
Oct 23 PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 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和ACCESS写聊天室(二)
2006/10/09 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
web 页面分页打印的实现
2009/06/22 Javascript
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
50行代码实现贪吃蛇(具体思路及代码)
2013/04/27 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
python flask中动态URL规则详解
2019/11/22 Python
python关闭占用端口方式
2019/12/17 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
Python如何用filter函数筛选数据
2020/03/05 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
详解python中的闭包
2020/09/07 Python
商场拾金不昧表扬信
2014/01/13 职场文书
保安部任务及岗位职责
2014/02/25 职场文书
学习之星事迹材料
2014/05/17 职场文书
社团活动总结怎么写
2014/06/30 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
家长会欢迎词
2015/01/23 职场文书
毕业实习证明范本
2015/06/16 职场文书