繁体   English   中英

致命错误:未捕获错误:Class 未找到“会话”

[英]Fatal error: Uncaught Error: Class 'session' not found

致命错误:未捕获错误:Class 在 C 中找不到“会话”:\var\www\html\tools\inc\constants.php:122 堆栈跟踪:#0 C:\var\www\html\tools\config.php (92): require_once() #1 C:\var\www\html\tools\header.php(1): require_once('C:\var\www\html...') #2 C:\var\ www\html\tools\index.php(1): require_once('C:\var\www\html...') #3 {main} 抛出 C:\var\www\html\tools\inc\constants .php 第 122 行

有问题的代码:第 121-138 行

if(php_sapi_name() !== 'cli'){
  $session = new session();

  session_set_save_handler(array($session, 'open'),
                           array($session, 'close'),
                           array($session, 'read'),
                           array($session, 'write'),
                           array($session, 'destroy'),
                           array($session, 'gc'));
  register_shutdown_function('session_write_close');
  session_start();
}
if(DEBUG){
  ini_set('xdebug.var_display_max_depth',-1);
  ini_set('xdebug.var_display_max_data',-1);
  ini_set('xdebug.var_display_max_children',-1);
  set_time_limit(240);
}

我不知道如何修复它,我在网上找不到任何东西。 我正在运行 php7,我认为不会有任何问题。 有没有什么办法解决这一问题? 我试过调用其他会话等。

另一个文件叫做:

 <?php class session implements \SessionHandlerInterface { public function __construct() { // session_set_save_handler( // array(&$this, 'open'), // array(&$this, 'close'), // array(&$this, 'read'), // array(&$this, 'write'), // array(&$this, 'destroy'), // array(&$this, 'gc') // ); // session_start(); // register_shutdown_function('session_write_close'); } public function open($savePath, $session_name) { $db = new database(TRUE); $db->query("INSERT INTO session SET session_id =:sessionName, session_data = '' ON DUPLICATE KEY UPDATE session_lastaccesstime = NOW()"); $db->bind(':sessionName',$session_name); $db->execute(); return true; } public function close() { return true; } public function read($id) { $db = new database(TRUE); $db->query("SELECT * FROM session WHERE session_id =:id"); $db->bind(':id',$id); if ($db->execute()) { $result = $db->single(\PDO::FETCH_ASSOC); return $result["session_data"].''; } return ''; } public function write($id, $data) { if ($data == null) { return true; } $db = new database(TRUE); $db->query("INSERT INTO session SET session_id =?, session_data =? ON DUPLICATE KEY UPDATE session_data =?"); $db->bind(1,$id); $db->bind(2,$data); $db->bind(3,$data); $db->execute(); return true; //session_write_close(); } public function destroy($id) { $db = new database(TRUE); $db->query("DELETE FROM session WHERE session_id =:id"); $db->bind(':id',$id); $db->execute(); return true; } public function gc($maxlifetime) { $db = new database(TRUE); $db->query("DELETE FROM session WHERE session_lastaccesstime < DATE_SUB(NOW(), INTERVAL ". $lifetime. " SECOND)"); $db->execute(); return true; } }

我尝试通过放置加载 class

require_once("inc/classes/session.php")

就在 if 语句之后,但这只会引发更多问题和更多未调用的类。 我将链接到 GitHub,以便您了解实际情况。

https://github.com/nfreader/newSS13tools

我在这里看不到答案,但我今天学会了如何做到这一点。

文件夹结构:

WebRoot
  |
  - class
  |  |
  |  - TestName
  |    |
  |    - testInterface.php
  |    - testClass.php
  - start.php

开始.php

spl_autoload_register(function ($class) {
    $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
    include '/class/' . $class . '.php';
});

测试接口.php

namespace TestName;

interface testInterface {

}

测试类.php

namespace TestName;

class testClass implements testInterface {

}

我发现的重要行是 spl_autoload 中的第一行。 我遇到了斜杠错误。 (linux 系统上的 Windows 分隔符)。 简单地替换那个双反斜线修复了我的错误。

我修复的来源:第一个结果使用一些精心制作的 foogling

我问的问题:load namespaces class with spl_autoload

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM