浅析虚拟主机服务器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
php 生成随机验证码图片代码
Feb 08 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 PHP
PHP反射API示例分享
Oct 08 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
PHP实用小技巧之调用录像的方法
Dec 05 PHP
phpstudy隐藏index.php的方法
Sep 21 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验证复选框有效性的示例
2013/11/13 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
js常用代码段整理
2011/11/30 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
使用python实现扫描端口示例
2014/03/29 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
HTML5标签小集
2011/08/02 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
MySQL触发器的使用
2021/05/24 MySQL
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS