浅析虚拟主机服务器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 相关文章推荐
基于mysql的bbs设计(三)
Oct 09 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
php实现mysql数据库备份类
Mar 20 PHP
深入php处理整数函数的详解
Jun 09 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
php获取字段名示例分享
Mar 03 PHP
一组PHP加密解密函数分享
Jun 05 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php并发加锁示例
Oct 17 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
JS禁用浏览器退格键实现思路及代码
2013/10/29 Javascript
javascript模拟命名空间
2015/04/17 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
深入研究React中setState源码
2017/11/17 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python进程间通信Queue实例解析
2018/01/25 Python
python 遍历pd.Series的index和value
2019/11/26 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
在python中list作函数形参,防止被实参修改的实现方法
2020/06/05 Python
Python OpenCV中的numpy与图像类型转换操作
2020/12/11 Python
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
美容院考勤制度
2014/01/30 职场文书
八项规定整改方案
2014/02/21 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
学校2014年度工作总结
2014/12/06 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
Python基础知识学习之类的继承
2021/05/31 Python