0

PHP バージョンを 5.4 (xampp 1.8.0) に更新すると、致命的なエラーが表示されます。

致命的なエラー: 5 行目の C:\xampp\htdocs\vs\classes\session.class.php でクラス セッションを再宣言できません

この問題は、PHPバージョンの更新に関連していますか?

session.class.php:

<?php
defined('_VALID') or die('Restricted Access!');

class Session
{   // <-- This Is Line 5 
    private static $_sess_db;

    public static function open() {
        global $config;    

        if (self::$_sess_db = mysql_connect($config['db_host'], $config['db_user'], $config['db_pass'])) {
            return mysql_select_db($config['db_name'], self::$_sess_db);
        }

        return false;
    }

    public static function close() {
        return mysql_close(self::$_sess_db);
    }

    public static function read($session_id) {
        $sql = sprintf("SELECT `session_data` FROM `sessions` WHERE `session_id` = '%s'", mysql_real_escape_string($session_id));
        if ($result = mysql_query($sql, self::$_sess_db)) {
            if (mysql_num_rows($result)) {
                $record = mysql_fetch_assoc($result);
                return $record['session_data'];
            }
        }

        return '';
    }

    public static function write($session_id, $session_data)
    {
        $sql = sprintf("REPLACE INTO `sessions` VALUES('%s', '%s', '%s')", mysql_real_escape_string($session_id),
                        mysql_real_escape_string(time()), mysql_real_escape_string($session_data) );

        return mysql_query($sql, self::$_sess_db);
    }

    public static function destroy( $session_id )
    {
        $sql = sprintf("DELETE FROM `sessions` WHERE `session` = '%s'", $session_id);
        return mysql_query($sql, self::$_sess_db);
    }

    public static function gc($max) {
        $sql = sprintf("DELETE FROM `sessions` WHERE `session_expires` < '%s'", mysql_real_escape_string(time() - $max));
        return mysql_query($sql, self::$_sess_db);
    }
}
4

2 に答える 2

4

session.class.php を複数回インクルードしているようです... または、インクルードされている別のファイルでクラス Session を宣言しています。

@cegfault が言うように:これinclude_oncerequire_once防ぐために使用できます。

ただし、ファイルを 1 回だけ含めるようにすることをお勧めします (メモリ使用量が少なくなります)。include_onceフェイルrequire_onceセーブのみです。

于 2012-08-02T19:25:17.230 に答える
1

if次のようなステートメントでクラスをラップしてみてください。

if (class_exists('Session') != true) {

    class Session { ... }

}

コード構造が複雑/大きい場合、これによりエラーが防止されます

ドキュメントを見るclass_exists()

于 2012-08-02T19:30:25.760 に答える