浅析虚拟主机服务器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 相关文章推荐
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
PHP生成UTF8文件的方法
May 15 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
Nov 10 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
Nov 07 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
PHP多态代码实例
Jun 26 PHP
php实现的农历算法实例
Aug 11 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
php实现留言板功能(代码详解)
Mar 28 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多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
Vue中正确使用jQuery的方法
2017/10/30 jQuery
React Native react-navigation 导航使用详解
2017/12/01 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Python连接字符串过程详解
2020/01/06 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Python自省及反射原理实例详解
2020/07/06 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
求职自荐信格式
2013/12/04 职场文书
工作自荐信
2013/12/11 职场文书
远程教育心得体会
2014/01/03 职场文书
股东出资证明书范例
2014/10/04 职场文书
追悼会答谢词
2015/01/05 职场文书
MySQL触发器的使用
2021/05/24 MySQL