0

这是我的困境:

我正在创建一个多语言平台。为此,我创建了 json 文件,其中包含每种语言的所有翻译文本。

现在,当用户登陆他们的页面时,我从该文件中读取并将翻译数组存储在 $_SESSION 变量中,例如

$_SESSION['website_text'] = json_decode(file_get_contents("content_".$language.".json"), true);

然后每次我想在视图上回显文本时,我都会从会话数组中访问元素:

$text = $_SESSION['website_text']['paragraph2_headline'];

现在我想知道,因为 $_SESSION 存储在服务器上。像我一样从会话中读取还是每次从文件中读取并解码 json 更快?第二种选择是这样的:

$website_text = json_decode(file_get_contents("content_".$language.".json"), true);
$text =  $website['paragraph2_headline'];

感谢大家的帮助!

4

3 回答 3

4

从 中提取数据很可能会更快$_SESSION,但$_SESSION不是存储本地化数据的好地方,因为它最终会为每个用户复制。

当您从中检索字符串时,$_SESSIONPHP 必须从会话文件中读取数据(它已经读取任何其他会话数据,因此打开文件的成本在一定程度上摊销了)并unserialize在其上运行;如果您从 JSON 文件中检索它,则它已打开文件,读取并运行json_decode. unserialize应该比 快json_decode,但请不要引用我的话。

如果您有兴趣加快速度,最好直接从 PHP 文件中读取字符串,并将它们存储为数组:

// content_en.php
<?php
return array(
    'welcome' => 'Welcome to our website!',
    // ...
);

即使您的本地化文件是 JSON,也很容易将 JSON“编译”成 PHP 并将 PHP 代码用作缓存:

$lang = 'en';

$sourceFile = 'content_'.$lang.'.json';
$cacheFile = 'content_'.$lang.'.cache.php';
if (!is_file($cacheFile)) {
    $content = json_decode(file_get_contents($sourceFile), true);
    file_put_contents($cacheFile, "<?php\n return ".var_export($content, true).";");
}
else {
    $content = include($cacheFile);
}
于 2012-09-20T12:55:00.997 回答
1

我对 JSON 不太了解,但我知道将$_SESSION其保存为服务器上的文件

file_put_contents($path, serialize($_SESSION));

并读为

$_SESSION = unserialize(file_get_contents($path));

是的,正如 Jon 所说,如果您有速度,请将其格式化为原生 PHP 代码,或者我们可以在此示例中将数据另存为 PHP 文件。

function save_data($path,$data) {
     file_put_contents($path, "<?php $data=unserialize('".addslashes(serialize($data))."'); ?>");
}

而对于加载,这只是包含文件,然后从 $data 获取数据。

于 2012-09-20T12:58:40.450 回答
0

在您给我们的两个示例中,您将本地化数据存储在文件中,但以不同的方式处理它们,一种在变量中,另一种在会话中。

问题应该是“如何有效地处理本地化数据”

于 2012-09-20T13:06:30.400 回答