浅析虚拟主机服务器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 相关文章推荐
PHP4之真OO
Oct 09 PHP
php比较两个字符串长度的方法
Jul 13 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
Laravel相关的一些故障解决
Aug 19 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
Mar 09 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 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
杏林同学录(七)
2006/10/09 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
jquery实现弹出层完美居中效果
2014/03/03 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
JS作用域链详解
2017/06/26 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
js数组的基本使用总结
2021/01/18 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
github配置使用指南
2014/11/18 Python
Python写的服务监控程序实例
2015/01/31 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
主持人婚宴答谢词
2014/01/28 职场文书
医疗器械售后服务承诺书
2014/05/21 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android