【问题标题】:Trouble with PHP sessions for including langauge files包含语言文件的 PHP 会话问题
【发布时间】:2021-05-30 11:49:02
【问题描述】:

我正在尝试改造我公司的旧网站。目前它支持两种语言——英语和希伯来语。它的工作方式是它只是在语言文件“lang_en.php”或“lang_he.php”上运行 include_once,具体取决于 $_SESSION['lang'] 中包含的内容,即“en”或“he” .

现在我正在处理第一页 - Index.php(主页)、Login.php 和 Register.php。所有 3 个开始时都完全一样,都有一点嵌套的 include 调用。

<!DOCTYPE html>
<html lang="en">

<?php
include '../Common/HtmlHead.php';
?>

文件 HtmlHead.php 是我运行 session_start() 的地方,包含文件 LanguageParser 并为页面的 html 部分做一些其他的构建。

<?php
session_start();

include_once("../../Controller/Config.php");
include_once("../../Tests/ObjectModels/ServerResponse.php");
include_once("../../Tests/ObjectModels/Users/User.php");

include_once("../Language/LanguageParser.php");
?>

最后是 LanguageParser.php 文件,它查看 GET 和 SESSION 并确定要在哪个语言文件上运行 include_once:

if (isset($_GET['lang'])) {
    $_SESSION['lang'] = $_GET['lang'];
}

// Include Language file
if (isset($_SESSION['lang'])) {
    $langFile ="lang_" . $_SESSION['lang'] . ".php";
    if (file_exists($_SERVER['DOCUMENT_ROOT']."/Logic/SmartView/Language/".$langFile)) {
        include_once $langFile;
    } else {
        include_once "lang_en.php";
    }
} else {
    include_once "lang_en.php";
}

但由于某种原因,保存在 $_SESSION['lang'] 中的语言似乎并没有坚持下去。每个页面的行为就好像它有自己的会话并保存了自己的语言。即使我更改语言,导航到另一个页面,然后返回,语言也会恢复。

【问题讨论】:

    标签: php debugging


    【解决方案1】:

    当某些输出已发送到客户端时,会话无法启动。您可以在任何HTMLecho 调用之前使用$_SESSION

    语言解析器.php

    <?php
    session_start();
    $lang = 'en';
    if (isset($_GET['lang'])) {
        $_SESSION['lang'] = $_GET['lang'];
    }
    if (isset($_SESSION['lang'])) {
        $lang = $_SESSION['lang'];
    }
    ?>
    <!DOCTYPE html>
    <html lang="<?php echo $lang?>">
    
    <?php
    include '../Common/HtmlHead.php';
    ?>
    

    HtmlHead.php

    // Include Language file
    $langFile ="lang_" .$lang . ".php";
    if (file_exists($_SERVER['DOCUMENT_ROOT']."/Logic/SmartView/Language/".$langFile)) {
        include_once $langFile;
    } else {
        include_once "lang_en.php";
    }
    

    【讨论】:

    • 在发送输出之前调用 session_start() 不是一个技巧,它是必需的,因为它设置了一个 cookie。您不一定需要在输出之前使用 $_SESSION
    • 好的,是的,做到了!我不知道在向客户端发送输出之前必须调用 session_start,但事后看来这是有道理的(你能告诉我还是 PHP 的初学者吗?)。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2021-07-04
    相关资源
    最近更新 更多