浅析虚拟主机服务器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入门源程序
Oct 09 PHP
dedecms中常见问题修改方法总结
Mar 21 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
微信公众平台DEMO(PHP)
May 04 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
详解将数据从Laravel传送到vue的四种方式
Oct 16 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 PHP
PHP http请求超时问题解决方案
Nov 13 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部分常见问题总结
2006/10/09 PHP
php不用正则采集速度探究总结
2008/03/24 PHP
PHP 文件类型判断代码
2009/03/13 PHP
php 分页函数multi() discuz
2009/06/21 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
jquery实用代码片段集合
2010/08/12 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
Python复制文件操作实例详解
2015/11/10 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
python中必要的名词解释
2019/11/20 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
英国电气世界:Electrical World
2019/09/08 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
新娘父亲婚礼致辞
2014/01/16 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS