仮想ホストサーバphp fsockopen関数が無効になった解決策の概要

1736 ワード

一、fsockopen()をどのように無効にするかは、fsockopen()の一般的な無効化の2つの方法である.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_クライアント()はどうしますか?自分で関数を書いて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( .