ai didi

php - 为什么 PHP 会在本地包含的函数中抛出 "Cannot Redeclare"错误?

转载 作者:可可西里 更新时间:2023-11-01 01:03:22 24 4
gpt4 key购买 nike

这是我的问题:我有一个包含本地函数的文件 (VRC_Header.php)。在这里:

function sec_session_start() {
$session_name = 'sec_session_id'; //set a custom session name
$secure = false; //set to true if using https
$httponly = true; //This stops javascript being able to access the session id

ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies
$cookieParams = session_get_cookie_params(); //Gets currtent cookies params
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["domain"], $secure, $httponly);
session_name($session_name); //Sets the session name to the one set above
session_start(); //Start the php session
session_regenerate_id(); //regernates the session, delete the old one
}

这很简单。我将此文件包含在每个公共(public)页面中。例如,

include_once('VRC_Header.php');
include_once('../Classes/VRC_MasterOO.php');
include_once('../Classes/VRC_Secure_Login.php');

//Start a secure session
sec_session_start();

我的问题发生在我的登录页面和 php 处理页面之间。提交通过后置 jQuery 函数进行。第二页包含与上面相同的代码:

include_once('VRC_Header.php');
include_once('../Classes/VRC_MasterOO.php');
include_once('../Classes/VRC_Secure_Login.php');

//Start a secure session
sec_session_start();

不幸的是,我的 jQuery 函数回复如下:

Fatal error: Cannot redeclare sec_session_start() (previously declared in E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_Header.php:14) in E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_Header.php on line 24

请注意,我的 jQuery 函数显示了回复 - 这意味着我认为问题出在第二个文件中。因此,“不能重新声明”。为什么会这样?我以前在使用本地函数时没有遇到过这个问题。

欢迎任何意见。

注意:我已经删除了两个文件中的包含函数。如果我这样做,PHP 会抛出另一个错误:“sec_session_start()”未定义。”

中间 jQuery 函数:

$(document).ready(function () {
$('.login-form').submit(function (e) {
e.preventDefault();
$('#reply').remove();
var formData = $(this).serialize();
$("input").prop("disabled", true);
request = $.post('VRC_LoginProcess.php', formData, loginMessage);
request.fail(function() {
$('.header').append("<span id=\"reply\">Login Failed. Please try again in a few minutes.</ span>"); });

function loginMessage(data) {
$('.header').append("<span id=\"reply\">" + data + "</ span>");
$("input").prop("disabled", false);
}
});
});

最佳答案

关键是这条错误信息:

Fatal error: Cannot redeclare sec_session_start() (previously declared in E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_Header.php:14) in E:\Additional Programs\xampp\htdocs\Vista_Ridge_Territory_System\PHP\Scripts\VRC_Header.php on line 24

发生此错误的唯一方法是您包含两次VRC_Header.php。这与 jQuery 无关,与 session 或重新生成 session ID 无关。两个不同的行号只是指向函数的开始/结束。

尝试在函数上方放置一个 echo() 命令,您应该会看到 echo 发生两次。更好的是,将以下代码放在您的函数之上,它会显示一条更有用的错误消息,包括一个回溯,这将帮助您了解该文件是如何被第二次包含的:

if (function_exists('sec_session_start')) {
debug_print_backtrace();
die('Trying to define sec_session_start() a second time');
}

关于php - 为什么 PHP 会在本地包含的函数中抛出 "Cannot Redeclare"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376805/

24 4 0
文章推荐: java - 比较两个日期之间的天数 -> 更简单的方法?
文章推荐: swift - "subscript"的使用不明确
文章推荐: java - 删除在 Java GUI 中使用 Alt-F4 和 Alt-TAB 的可能性
文章推荐: xcode - 如何在 Swift 的方法中修改 Dictionary 对象?
可可西里
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com