这是我的困境:
我正在创建一个多语言平台。为此,我创建了包含每种语言的所有翻译文本的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'];
谢谢大家的帮助!
答案 0 :(得分:3)
从$_SESSION
提取数据时,最有可能更快,但$_SESSION
不是存储本地化数据的好地方,因为最终会为每个用户复制数据。
当您从$_SESSION
检索字符串时,PHP必须从会话文件中读取数据(它已经读取任何其他会话数据,因此打开文件的成本有些摊销)并运行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);
}
答案 1 :(得分:1)
我对JSON知之甚少,但我知道$_SESSION
保存为
服务器上的文件
file_put_contents($path, serialize($_SESSION));
读作
$_SESSION = unserialize(file_get_contents($path));
是的,正如乔恩所说,如果您有速度,请将其格式化为本机PHP代码,或者我们可以将数据保存为此文件中的PHP文件。
function save_data($path,$data) {
file_put_contents($path, "<?php $data=unserialize('".addslashes(serialize($data))."'); ?>");
}
对于加载,这只是包含文件,然后从$ data获取数据。