PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法

所属分类: 网络编程 / PHP编程 阅读数: 1893
收藏 0 赞 0 分享

也许fsockopen、pfsockopen函数的确存在着安全的隐患,但是我们却已经无从考证,这都是IDC商说的,不管是什么原因吧,反正他们是把这两个函数禁用了,那么如何解决呢,下面是小编整理的方法,希望对用到的同学有一定的参考。

解决方法如下:

一、使用stream_socket_client()替代

服务器同时禁用了fsockopen、pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。  

具体操作:

搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。   

示例如下:

修改前:

复制代码 代码如下:
$fp = fsockopen($host, 80, $errno, $errstr, 30);

复制代码 代码如下:
$fp = fsockopen($host, $port, $errno, $errstr, $connection_timeout);

修改后:

复制代码 代码如下:
$fp = stream_socket_client(“tcp://”.$host.”80″, $errno, $errstr, 30);

复制代码 代码如下:
$fp = stream_socket_client(“tcp://”.$host.”:”.$port, $errno, $errstr, $connection_timeout);

二、重写法

如果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( 。

以上的方法中,我用stream_socket_client()替代问题解决,第二个方法没有去试。

更多精彩内容其他人还在看

php实现的美国50个州选择列表实例

这篇文章主要介绍了php实现的美国50个州选择列表实例,可实现让当前州为选中状态的功能,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP使用递归生成文章树

写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助.大概步骤如下:首先到数据库取数据,放到一个数组,然后把数据转化为一个树型状的数组,最后把这个树型状的数组转为html代码。下面我们来看个实例
收藏 0 赞 0 分享

wordpress安装过程中遇到中文乱码的处理方法

这篇文章主要介绍了wordpress安装过程中遇到中文乱码的处理方法,是个人项目中遇到的一个奇葩事件,经过一番研究,终于解决,这里记录下来分享给大家,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

php的crc32函数使用时需要注意的问题(不然就是坑)

这篇文章主要介绍了php的crc32函数使用时需要注意的问题(不然就是坑) ,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP中把对象转换为关联数组代码分享

这篇文章主要介绍了PHP中把对象转换为关联数组代码分享,本文直接给出实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

php检测url是否存在的方法

这篇文章主要介绍了php检测url是否存在的方法,涉及php中get_headers及正则匹配的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

php获取twitter最新消息的方法

这篇文章主要介绍了php获取twitter最新消息的方法,涉及php操作curl及正则替换的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

php遍历CSV类实例

这篇文章主要介绍了php遍历CSV类,实例分析了php针对csv文件的打开、读取及遍历的技巧,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP使用mysqldump命令导出数据库

最近用php写一个数据备份的功能。做法是使用php的system函数执行mysqldump命令,进行备份,这里分享给大家,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

PHP用反撇号执行外部命令

shell_exec() 命令行实际上仅是反撇号 ` 操作符的变体,如果您编写过 shell 或 Perl 脚本,您就知道可以在反撇号操作符内部捕捉其他命令的输出。
收藏 0 赞 0 分享
查看更多