浅析虚拟主机服务器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中fgetcsv()函数用法实例
Nov 28 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
php单一接口的实现方法
Jun 20 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
Smarty环境配置与使用入门教程
May 11 PHP
降低PHP Redis内存占用
Mar 23 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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
B2K与车机的中波PK
2021/03/02 无线电
人大复印资料处理程序_查询篇
2006/10/09 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
PDO::beginTransaction讲解
2019/01/27 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
jquery实现企业定位式导航效果
2018/01/01 jQuery
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
Python中join和split用法实例
2015/04/14 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
详解python with 上下文管理器
2020/09/02 Python
Django用内置方法实现简单搜索功能的方法
2020/12/18 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
日语求职信范文
2013/12/17 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
创先争优标语
2014/06/27 职场文书
化验室岗位职责
2015/02/14 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
python 实现体质指数BMI计算
2021/05/26 Python