Heim >php教程 >php手册 >PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法,fsockopen函数

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

WBOY
WBOYOriginal
2016-06-13 09:29:111545Durchsuche

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

也许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()替代问题解决,第二个方法没有去试。

Win的主机禁用了函数fsockopen与pfsockopen,不可以调用API,怎解决?

我告诉你地址就行啦
 

安装在虚拟主机上的wordpress程序怎更改fsockopen pfsockopen函数禁用?

修改fsockopen pfsockopen是需要修改PHP的配置文件php.ini,该文件是PHP程序的文件,放在PHP目录下,并不是wordpress的一个文件。

wordpress是使用PHP进行解析的一款网页程序,他所依赖的函数必须得到PHP的支持,若要更改PHP的配置,请到PHP所在目录下找到php.ini进行修改。
 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn