浅析虚拟主机服务器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中的 == 运算符进行字符串比较
Nov 26 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
php 生成饼图 三维饼图
Sep 28 PHP
PHP中文件上传的一个问题
Sep 04 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php生成excel列序号代码实例
Dec 24 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php实现四舍五入的方法小结
Mar 03 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
Oct 07 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
js禁止表单重复提交
2017/08/29 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
python之yield表达式学习
2014/09/02 Python
python使用socket进行简单网络连接的方法
2015/04/29 Python
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
python编程开发之日期操作实例分析
2015/11/13 Python
详解Python_shutil模块
2019/03/15 Python
python机器学习实现决策树
2019/11/11 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
全球立体声:World Wide Stereo
2018/09/29 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
医学类导师推荐信范文
2013/11/19 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
转让协议书范本
2014/04/15 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
修改并编译golang源码的操作步骤
2021/07/25 Golang