[英]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,以便您了解实际情况。
我在这里看不到答案,但我今天学会了如何做到这一点。
文件夹结构:
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.