簡體   English   中英

帶有語言和平面文件的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”,其博客文章均已撰寫。 語言選擇有效,沒有任何問題。 但是我希望當用戶選擇其他語言時,博客會自動讀取博客的語音對應文件夾並包含輸出文件。

問題是有兩個會話。 這會導致錯誤! 我的問題是:如何將一個會話中的所有內容合並在一起或如何在不沖突的情況下將兩個會話連接在一起,所以它既可以工作(網站的語言以及訪問者選擇的文件夾中文件的輸出)博客文章)。

在此先感謝大家的幫助和建議! 問候語

您不需要兩個會話來保存相同的變量($ 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;

安德魯,我想我說錯了。 用於語言交換的common.php是負責任的,應該保留。 我只需要common.php中的一個功能與其他提到的Script中的功能相同。 一定有可能...

  • 已更改為網站上的所選語言
  • 並且同時也指博客的子文件夾(“帖子”)。

結構

[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]文件夾的子文件夾以及要讀取的包含文件和文件內容輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM