浅析虚拟主机服务器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 25 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
使用PHP编写的SVN类
Jul 18 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
Yii2验证器(Validator)用法分析
Jul 23 PHP
注意!PHP 7中不要做的10件事
Sep 18 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
thinkphp5实现无限级分类
Feb 18 PHP
php框架知识点的整理和补充
Mar 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
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
基于jQuery实现图片的前进与后退功能
2013/04/24 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
jQuery无刷新切换主题皮肤实例讲解
2015/10/21 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
详谈js原型继承的一些问题
2017/09/06 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
python如何实现代码检查
2019/06/28 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
python实现粒子群算法
2020/10/15 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
关于祖国的演讲稿
2014/05/04 职场文书
节能减耗标语
2014/06/21 职场文书
整改通知书
2015/04/20 职场文书
校园安全教育心得体会
2016/01/15 职场文书
python实现A*寻路算法
2021/06/13 Python