PHP会话与语言和平面文件


PHP Session with a Language and Flat-File

请原谅我的英语水平。我有一个主页与语言交换在以下包括common.php

    <?php
session_start();
header('Cache-control: private');
if(isSet($_GET['lang']))
{
$lang = $_GET['lang'];
$_SESSION['lang'] = $lang;
setcookie('lang', $lang, time() + (3600 * 24 * 30));
} else if(isSet($_SESSION['lang'])) {
$lang = $_SESSION['lang'];
} else if(isSet($_COOKIE['lang'])) {
$lang = $_COOKIE['lang'];
} else {
$lang = 'de';
}
switch ($lang) {
case 'en': $lang_file = 'lang.en.php'; break;
case 'de': $lang_file = 'lang.de.php'; break;
case 'ru': $lang_file = 'lang.ru.php'; break;
case 'fr': $lang_file = 'lang.fr.php'; break;
default: $lang_file = 'lang.de.php';
} 
include_once 'lang/'.$lang_file;
?>

现在我想在我的网站上实现一个带有平面文件的迷你博客,并使用以下代码

  <?php
   define("DEFAULT_LANGUAGE", "lang=de");
   session_start();
   $languages = ["de", "en", "fr", "ru"];
   if( isset($_GET["lang"]) ){ $lang = filter_input(INPUT_GET, "lang", FILTER_SANITIZE_STRING);
   if( !in_array($lang, $languages) ){ $lang = DEFAULT_LANGUAGE; }
     $_SESSION["language"] = $lang;
   }
   function get_lang() { return isset($_SESSION["language"]) ? $_SESSION["language"] : DEFAULT_LANGUAGE; }
   function get_post_names() {
   static $_cache = [];
   if(empty($_cache)){ $_cache = array_reverse(glob(__DIR__ . '/posts/' . get_lang() . '/*.php')); }
   return $_cache;  
   }
   function print_posts() { $paths = get_post_names();
   foreach( $paths as $path ){ $content = file_get_contents($path);
   echo "<div class='post'>'n";
   echo "<p>{$content}</p>'n";
   echo "</div>'n'n";
     }  
   }
   ?>
   <?php print_posts(); ?>

对于博客文章,有一个文件夹[posts],其中包含子文件夹(de, en, fr, ru)。根据语言的不同,在这些子文件夹中有:"examplepost.php",其博客文章是在其中编写的。语言选择工作没有任何问题。但是我希望当用户选择不同的语言时,Blog会自动读取该Blog的语音对应文件夹并包含输出文件。

问题是有两个会议。这会导致错误!我的问题是:我如何在一个会话中合并所有内容,或者我如何将两个会话连接起来而不产生冲突,这样它就可以同时工作(网站的语言和访问者文件夹中文件的输出为博客文章选择的语言)。

提前感谢你们所有人的帮助和建议!问候

您不需要两个会话来保存相同的变量($lang)。
你可以这样做:

session_start();
// check/set default language session    
if (!isset($_SESSION["language"])) {
$_SESSION["language"] = DEFAULT_LANGUAGE;
}
if ($isset($_GET['lang']) && in_array($_GET['lang'], $languages) ){
$_SESSION["language"] = $_GET['lang'];
}
// execute more code
$lang_file = 'lang.'.$_SESSION["language"].'.php';
include_once 'lang/'.$lang_file;
<p我想我表达错了。用于语言交换的common.php是负责任的,应该保留。我只需要一个函数在common.php什么是相同的函数在其他提到的脚本。很可能……>
  • 在网站
  • 上更改为所选语言
  • 同时也提到了博客的子文件夹("posts")。

[root]
|_ acp ........ admin-center
|_ css ........ css styles
|_ img ........ graphics
|_ inc ........ includes files
|_ func ....... function files (i.e. common.php)
|_ js ......... js files
|_ lang ....... language files
|_ posts ...... for the Blog Postings 
  |_ [de] [en] [fr] [ru]

在最后一个文件夹中是。php文件,根据语言的选择,通过common.php选择,同时与common.php同时选择博客的[posts]文件夹中的文件,并显示供阅读。

总之……1)根据语言中的语言文件重定向- AND - 2)除了子文件夹中的[posts]文件夹和所包含的文件要读取和文件的内容输出。