【问题标题】:PHP: Fatal error: Cannot redeclare class SessionPHP:致命错误:无法重新声明类会话
【发布时间】:2012-08-02 19:22:36
【问题描述】:

当我的 PHP 版本更新到 5.4 (xampp 1.8.0) 时,我看到 致命错误

致命错误:无法在第 5 行的 C:\xampp\htdocs\vs\classes\session.class.php 中重新声明类 Session

这个问题与更新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);
    }
}

【问题讨论】:

  • 页面是如何被调用的?听起来你在某处有一个双 includerequire。尝试改用include_oncerequire_once

标签: session php


【解决方案1】:

您似乎不止一次包含 session.class.php...或者您在包含的另一个文件中声明了类 Session。

正如@cegfault 所说:include_oncerequire_once 可以用来防止这种情况。

但最好确保只包含一次文件(更少的内存使用)。 include_oncerequire_once 只是失败保存。

【讨论】:

  • 一定要提到include_oncerequire_once可以用来防止这种情况
  • 我不止一次包含 session.class.php,所以现在通过删除其中一个来修复。谢谢。
【解决方案2】:

尝试将您的类包装在 if 语句中,如下所示:

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

    class Session { ... }

}

如果您的代码结构复杂/大,这将防止错误

class_exists() documentation

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 2014-11-07
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多