我有以下代码,它在XAMPP服务器上运行良好。现在我将PHP-Code和MySQL-Database复制到一个新的服务器上,手动安装了Apache,PHP和MySQL。
我收到以下错误:
警告:未捕获mysqli_sql_exception:MySQL服务器已经消失了 C:\ intranet \ apache24 \ htdocs \ content \ php \ session.class.php:87
堆栈追踪:
#0 C:\ intranet \ apache24 \ htdocs \ content \ php \ session.class.php(87): mysqli_stmt-> execute()
#1 [内部功能]: session-> read('3r7jkgjk93pu9fc ...')
#2 C:\ intranet \ apache24 \ htdocs \ content \ php \ session.class.php(43): session_regenerate_id(true)
#3 C:\ intranet \ apache24 \ htdocs \ content \ php \ session.class.php(19): session-> start_session('_ sichereSitzung ...',false)
#4 C:\ intranet \ apache24 \ htdocs \ content \ php \ session.php(16): session-> __ construct()
#5 C:\ intranet \ apache24 \ htdocs \ index.php(21): require_once('C:\ intranet \ apa ...')
#6 {main}投入 第87行的C:\ intranet \ apache24 \ htdocs \ content \ php \ session.class.php 可捕获的致命错误:session_regenerate_id():无法创建 会话ID:用户(路径:) C:\内部网\ apache24 \ htdocs中\内容\ PHP \ session.class.php
第43r行代码
这是我的代码:
class session {
function __construct() {
// set custom session functions
session_set_save_handler(array($this, 'open'), array($this, 'close'), array($this, 'read'), array($this, 'write'), array($this, 'destroy'), array($this, 'gc'));
// this line prevents unexpected effects when using objects as save handler
register_shutdown_function('session_write_close');
// start the session
$this->start_session('_sichereSitzung-A3i6Zz', FALSE);
}
function start_session($session_name, $secure) {
// make sure the session cookie is not accessible via javascript
$httponly = true;
// get session cookie parameters
$cookieParams = session_get_cookie_params();
// set the parameters
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);
// prevent javascript from getting session id
ini_set('session.use_only_cookies', 1);
// change the session name
session_name($session_name);
// now we can start the session
session_start();
// this line regenerates the session and delete the old one
// it also generates a new encryption key in the database
session_regenerate_id(true);
}
function open() {
// configuration file
require_once('config.php');
// the sql data
require_once(PHP_PATH . 'sqluserdata.php');
//open mysqli-connection
$mysqli = new mysqli(SESS_HOST, SESS_USER, SESS_PW, SESS_DB, SESS_PORT);
//bind the mysqli-connection to variable
$this->db = $mysqli;
return true;
}
function close() {
// close mysqli-connection
$this->db->close();
return true;
}
function read($id) {
$min=1;
$max=200;
$rand = mt_rand($min,$max);
// only run garbage collection random on page load
if ($rand == 1) {
// garbage collection
$this->gc(259200);
}
// if statement doesnt exists create statement
if (!isset($this->read_stmt)) {
$this->read_stmt = $this->db->prepare("SELECT data FROM session WHERE id = ? LIMIT 1");
}
// bind session parameter, run statement, bind result to variable
$this->read_stmt->bind_param('s', $id);
$this->read_stmt->execute();
$this->read_stmt->store_result();
$this->read_stmt->bind_result($data);
$this->read_stmt->fetch();
return $data;
}
function write($id, $data) {
// bind time to variable
$time = time();
// if statement doesnt exists, prepare statement
if(!isset($this->w_stmt)) {
$this->w_stmt = $this->db->prepare("REPLACE INTO session (id, access, data) VALUES (?, ?, ?)");
}
// bind variables, execute statement
$this->w_stmt->bind_param('sis', $id, $time, $data);
$this->w_stmt->execute();
return true;
}
function destroy($id) {
// if statement doesnt exists, prepare statement
if(!isset($this->delete_stmt)) {
$this->delete_stmt = $this->db->prepare("DELETE FROM session WHERE id = ?");
}
// bind parameters, execute statement
$this->delete_stmt->bind_param('s', $id);
$this->delete_stmt->execute();
return true;
}
function gc($max) {
// if statement doesnt exists, prepare statement
if(!isset($this->gc_stmt)) {
$this->gc_stmt = $this->db->prepare("DELETE FROM session WHERE access < ?");
}
// calculate time to delete
$old = time() - $max;
// bind parameters, execute query
$this->gc_stmt->bind_param('s', $old);
$this->gc_stmt->execute();
return true;
}
}
有人知道这个错误吗?提前谢谢。
答案 0 :(得分:0)
此错误与您的PHP代码无关 - 这是MySQL发送的错误。
MySQL服务器最常见的原因已经消失了 服务器超时并关闭连接。在这种情况下,你 通常会得到以下错误代码之一(你得到的是哪一个) 取决于操作系统。)
查看我链接到的页面中可能存在的问题。常见的问题是:
运行查询时是否始终发生错误?或者它是一些特定的查询它崩溃了什么?你应该先检查一下。