1

サーバーで問題なく実行しているスクリプトがありますが、今日、サーバーへの dos 攻撃に続いて、突然次のエラーが発生します。サーバーが再起動され、問題のある IP アドレスがブロックされましたが、現在、このスクリプトは機能していません。サーバーの何が問題なのかを突き止めようとしている過程で、Apacheモジュールが再インストールされたと思うので、これが何かに関連しているのではないかと思います。

/home/name/public_html/folder/ipology.class.php 行 43 で致命的なエラー呼び出し時の参照渡しが削除されました

これは、43 行目あたりのコード セクションです。

 function _fetch()
{
    if(!$sock = @fsockopen($this->_whois, $this->_port, &$errno, &$errstr, 10))
        return false;
    else
    {
        fputs($sock, "{$this->_ip}\n");
        while(!feof($sock))
            $buffer .= fgets($sock, 10240);
        fclose($sock);
        $this->_buffer = $buffer;
        return true;
    }
}

突然機能しなくなった理由、または実際にエラーが何に関連しているのか、誰かが何かアイデアを持っていれば、それは大歓迎です。

ありがとう

4

2 に答える 2

0

PHP ドキュメントで読めるように、お使いのバージョンの PHP 5.4.0 では、「call-time pass-by-reference」を使用すると致命的なエラーが発生します。

ここでそれは言います

PHP 5.3.0 以降、foo(&$a); で & を使用すると、「call-time pass-by-reference」は推奨されないという警告が表示されます。また、PHP 5.4.0 以降、call-time pass-by-reference が削除されたため、これを使用すると致命的なエラーが発生します。

http://php.net/manual/en/language.references.pass.php

于 2013-10-30T22:45:51.257 に答える
0

あなたは新しいPHPバージョンを持っていると思います.あなたはあなたの例で参照を使って作業しています.

if(!$sock = @fsockopen($this->_whois, $this->_port, &$errno, &$errstr, 10))

&と の前の$errnoを削除し$errstrます。

if(!$sock = @fsockopen($this->_whois, $this->_port, $errno, $errstr, 10))

PHPのドキュメントで見たのはこれだと思います

resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

これは、C での実際の実装について説明しています。

于 2013-10-30T22:48:51.313 に答える