浅析虚拟主机服务器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 中关于ord($str)>0x80的详细说明
Sep 23 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
php遍历树的常用方法汇总
Jun 18 PHP
php统计数组元素个数的方法
Jul 02 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
Aug 15 PHP
PHP命名空间简单用法示例
Dec 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获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&Firefox] 有文档和例子
2007/05/30 Javascript
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
JS三级联动代码格式实例详解
2019/12/30 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python 元组操作总结
2019/09/18 Python
python已协程方式处理任务实现过程
2019/12/27 Python
解决Tensorflow sess.run导致的内存溢出问题
2020/02/05 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python中怎么表示空值
2020/06/19 Python
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
教师工作能力自我评价
2015/03/04 职场文书
销售员岗位职责范本
2015/04/11 职场文书
最感人的道歉情书
2015/05/12 职场文书
导游词之桂林
2019/08/20 职场文书