浅析虚拟主机服务器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中调用JAVA
Oct 09 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
第五章 php数组操作
Dec 30 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
smarty内置函数capture用法分析
Jan 22 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
php7中停止php-fpm服务的方法详解
May 09 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获取二叉树镜像的方法
2018/01/17 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
取选中的radio的值
2010/01/11 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
EasyUI Pagination 分页的两种做法小结
2016/07/09 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
python实现自动更换ip的方法
2015/05/05 Python
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
遗传算法python版
2018/03/19 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
python实现最速下降法
2020/03/24 Python
python实现人机五子棋
2020/03/25 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
商务英语应届生自我鉴定
2013/12/08 职场文书
超市营业员岗位职责
2013/12/20 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
党支部培养考察意见
2015/06/02 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
Python中time标准库的使用教程
2022/04/13 Python