ホームページ  >  記事  >  バックエンド開発  >  PHP の fsockopen 関数と pfsockopen 関数がホストプロバイダーによって無効にされる問題の解決策、fsockopen function_PHP チュートリアル

PHP の fsockopen 関数と pfsockopen 関数がホストプロバイダーによって無効にされる問題の解決策、fsockopen function_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:23:18994ブラウズ

PHPのfsockopen関数とpfsockopen関数がホストプロバイダーfsockopen関数によって無効にされる問題の解決策

fsockopen および pfsockopen 関数にはセキュリティ上のリスクがある可能性がありますが、それを検証する方法はありません。理由が何であれ、これら 2 つの関数はいずれにせよ無効になっているとのことです。どのように解決すればよいでしょうか。編集者がまとめた方法ですので、学生の方の参考になれば幸いです。

解決策は次のとおりです:

1. 代わりに 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);

2.書き換え方法

PHP バージョンが 5.0 未満で、fsockopen が無効になっており、stream_socket_client() がない場合はどうすればよいですか? fsockopen の関数を実装する関数を自分で記述します。参照コード:

コードをコピーします コードは次のとおりです:

関数 b_fsockopen($host, $port, &$errno, &$errstr, $timeout)
{
$ip = gethostbyname($host); $s =ソケット_作成(AF_INET, SOCK_STREAM, 0);

if (socket_set_nonblock($s))
{
$r = @socket_connect($s, $ip, $port);

if ($r ||socket_last_error() == EINPROGRESS)
{
$errno = EINPROGRESS; $s を返します。 }
}

$errno = ソケット_ラスト_エラー($s);

$errstr =ソケット_strerror($errno);

ソケットクローズ($s);

false を返します;

}

具体的な操作:

1. まず、fsockopen 関数を使用するコード セグメントを見つけて、その先頭に上記のコードを追加し、コード セグメント内で文字列 fsockopen( を検索し、それを b_fsockopen( .

) に置き換えます。

2. fsockopen 関数はファイル ポインタを返すため、file 関数で操作できますが、b_fsockopen 関数はファイル ポインタを返すことができません。fread( をsocket_read() に置き換える必要があります。 、fwrite(をsocket_write(とsocket_closeに置き換えます(fclose(を置き換えます。

)

上記の方法のうち、私は問題を解決するために、代わりに stream_socket_client() を使用しました。2 番目の方法は試しませんでした。

Win のホストが関数 fsockopen と pfsockopen を無効にしており、API を呼び出すことができません。どうすれば解決できますか?

住所だけ教えてください


仮想ホストにインストールされているWordPressプログラムのfsockopen pfsockopen関数を変更するにはどうすればよいですか?

fsockopen を変更する pfsockopen は PHP 設定ファイル php.ini を変更する必要があります。このファイルは PHP ディレクトリに配置されており、WordPress のファイルではありません。

Wordpress は解析に PHP を使用する Web ページ プログラムです。PHP が依存する機能は PHP でサポートされている必要があります。PHP の設定を変更したい場合は、PHP が存在するディレクトリで php.ini を見つけて変更してください。 。


http://www.bkjia.com/PHPjc/840756.html

tru​​ehttp://www.bkjia.com/PHPjc/840756.html技術記事 PHP の fsockopen 関数と pfsockopen 関数がホスト プロバイダーによって無効にされている問題の解決策。fsockopen 関数と pfsockopen 関数には確かにセキュリティ リスクがある可能性がありますが、それをテストする方法はありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。