浅析虚拟主机服务器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 相关文章推荐
Session的工作方式
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
PHP程序员编程注意事项
Apr 10 PHP
PHP通用检测函数集合
Feb 08 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
php获取文件内容最后一行示例
Jan 09 PHP
Laravel 5框架学习之表单
Apr 08 PHP
php实现复制移动文件的方法
Jul 29 PHP
PHP实现执行外部程序的方法详解
Aug 17 PHP
TP5框架安全机制实例分析
Apr 05 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
js href的用法
2010/05/13 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
python中zip和unzip数据的方法
2015/05/27 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
django ajax json的实例代码
2018/05/29 Python
Python tkinter label 更新方法
2018/10/11 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
Python新手如何理解循环加载模块
2020/05/29 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
入党积极分子介绍信
2014/01/17 职场文书
置业顾问岗位职责
2014/03/02 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
大学生见习报告总结
2014/11/04 职场文书
小学生读书笔记
2015/07/01 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书