Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于存储翻译短语的XML或PHP文件?_Php_Xml_Performance - Fatal编程技术网

用于存储翻译短语的XML或PHP文件?

用于存储翻译短语的XML或PHP文件?,php,xml,performance,Php,Xml,Performance,我有大约1000个翻译短语。最好将它们存储在XML文件中,并在每个页面顶部使用PHP读取,还是将它们存储在每个页面中包含的PHP文件中的PHP变量中?什么是最好的,特别是对性能而言 备选方案1(XML文件): 家 博客 阅读更多 ... ... 备选方案2(PHP文件): 使用以下代码加载XML文件: <?php class Phrases{ //load phrases to PHP: public function load_phrases($lang_id)

我有大约1000个翻译短语。最好将它们存储在XML文件中,并在每个页面顶部使用PHP读取,还是将它们存储在每个页面中包含的PHP文件中的PHP变量中?什么是最好的,特别是对性能而言

备选方案1(XML文件):


家
博客
阅读更多
...
...
备选方案2(PHP文件):


使用以下代码加载XML文件:

<?php
class Phrases{

    //load phrases to PHP:
    public function load_phrases($lang_id) {
        $xml = new DomDocument('1.0');

        //path to language directory
        $lang_path=("phrases/".$lang_id.'.xml');
        $xml->load($lang_path);

        //phrases are inside page tags, first we must get these
        $page = $xml->getElementsByTagName('page');
        $page_num=$page->length;

        for($i = 0; $i < $page_num; $i++) {
            $page=$xml->getElementsByTagName('page')->item($i);

            //get phrase tags and store them into array
            foreach($page->getElementsByTagName('phrase') as $phrase) {
                $phrase_name = $phrase->getAttribute('name');
                $phrases[$phrase_name] = $phrase->firstChild->nodeValue;
                $phrases[$phrase_name] = str_replace('\n','<br/>',$phrases[$phrase_name]);
            }
        }

        $this->phrases=$phrases;
    }

    //phrases are accessed
    public function lang_id() {
        //determine page language
        $lang = 'en';
        switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
            case 'sv':
                $lang = 'sv';
                break;
            case 'fr':
                $lang = 'fr';
                break;
            case 'it':
                $lang = 'it';
                break;
            case 'no':
                $lang = 'no';
                break;
            default:
                $lang = 'en';
        }

        $lang_id = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : $lang;

        //set the language cookie and update cookie expiration date
        if(!isset($_COOKIE['lang'])) {
          $expiration_date=time()+3600*24*7;
          setcookie('lang',$lang_id,$expiration_date,'/');
        }
        if(!isset($lang_id) || $lang_id == NULL) $lang_id = 'en';
        return $lang_id;
    }

    public function change_lang($lang_id) {
         setcookie('lang',$lang_id,$expiration_date,'/');  
    }

    //construct function
    public function __construct() {
      $this->load_phrases($this->lang_id());
    }

}
?>
load($lang\u路径);
//短语在页面标签中,首先我们必须得到这些
$page=$xml->getElementsByTagName('page');
$page_num=$page->length;
对于($i=0;$i<$page_num;$i++){
$page=$xml->getElementsByTagName('page')->item($i);
//获取短语标记并将其存储到数组中
foreach($page->getElementsByTagName('phrase')作为$phrase){
$phrase_name=$phrase->getAttribute('name');
$phrases[$phrase\u name]=$phrase->firstChild->nodeValue;
$phrases[$phrase\u name]=str\u replace('\n','
',$phrases[$phrase\u name]); } } $this->phrases=$phrases; } //短语被访问 公共函数lang_id(){ //确定页面语言 $lang='en'; 开关(substr($\u服务器['HTTP\u接受\u语言'],0,2)){ 案例“sv”: $lang='sv'; 打破 案例“fr”: $lang='fr'; 打破 案例“it”: $lang='it'; 打破 案件‘否’: $lang='no'; 打破 违约: $lang='en'; } $lang\u id=isset($\u COOKIE['lang'])?$\u COOKIE['lang']:$lang; //设置语言cookie并更新cookie过期日期 如果(!isset($_COOKIE['lang'])){ $expiration_date=time()+3600*24*7; setcookie('lang',$lang\u id,$expiration\u date',/); } 如果(!isset($lang_id)|$lang_id==NULL)$lang_id='en'; 返回$lang_id; } 公共功能更改\u lang($lang\u id){ setcookie('lang',$lang\u id,$expiration\u date',/); } //构造函数 公共函数构造(){ $this->load_短语($this->lang_id()); } } ?>

PHP文件加载了一个普通的PHP include。

为了提高性能,PHP include文件不需要任何额外的外部步骤,因此与打开外部XML文件、读取和解析数据以及分配变量相比,这显然是性能上的赢家

但是,您可能需要检查性能增益在您的场景中是否重要,因为现代操作系统将小文件完全缓存在内存中,并且一千个项目不应该给整个运行时增加太多


我建议,如果您可以从Web服务器访问MySQL数据库实例,您可以考虑将这些实例存储在数据库中——性能应该大致在XML和PHP之间,但以这种方式使用数据库是一种更好的模式。

我肯定会质疑MySQL数据库实际上比读取单个xml文件慢。我见过许多人使用xml替代方案,但我从未见过PHP替代方案。为什么呢?因为你说PHP替代方案在性能上会更好,我想我会因为这个原因而改变。或者使用XML而不是PHP还有其他好处吗?我的意思是,为什么人们使用XML替代方案,而不直接使用带有变量的PHP文件?关于MySQL我不希望这样,因为这意味着每次加载页面时都需要从数据库中加载1000-1500行,我认为这不是一个好的解决方案。@Danie使用xml的一个优点是,您可以将它发送给几乎任何语言服务提供商,他们可以轻松地进行翻译,而不需要了解php。事实上,XML是像这样的翻译软件的首选文件类型之一。
<?php
$header_home = "Home";
$header_blogs = "Blogs";
$header_readmore = "Read More";
...
?>
<?php
class Phrases{

    //load phrases to PHP:
    public function load_phrases($lang_id) {
        $xml = new DomDocument('1.0');

        //path to language directory
        $lang_path=("phrases/".$lang_id.'.xml');
        $xml->load($lang_path);

        //phrases are inside page tags, first we must get these
        $page = $xml->getElementsByTagName('page');
        $page_num=$page->length;

        for($i = 0; $i < $page_num; $i++) {
            $page=$xml->getElementsByTagName('page')->item($i);

            //get phrase tags and store them into array
            foreach($page->getElementsByTagName('phrase') as $phrase) {
                $phrase_name = $phrase->getAttribute('name');
                $phrases[$phrase_name] = $phrase->firstChild->nodeValue;
                $phrases[$phrase_name] = str_replace('\n','<br/>',$phrases[$phrase_name]);
            }
        }

        $this->phrases=$phrases;
    }

    //phrases are accessed
    public function lang_id() {
        //determine page language
        $lang = 'en';
        switch(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)){
            case 'sv':
                $lang = 'sv';
                break;
            case 'fr':
                $lang = 'fr';
                break;
            case 'it':
                $lang = 'it';
                break;
            case 'no':
                $lang = 'no';
                break;
            default:
                $lang = 'en';
        }

        $lang_id = isset($_COOKIE['lang']) ? $_COOKIE['lang'] : $lang;

        //set the language cookie and update cookie expiration date
        if(!isset($_COOKIE['lang'])) {
          $expiration_date=time()+3600*24*7;
          setcookie('lang',$lang_id,$expiration_date,'/');
        }
        if(!isset($lang_id) || $lang_id == NULL) $lang_id = 'en';
        return $lang_id;
    }

    public function change_lang($lang_id) {
         setcookie('lang',$lang_id,$expiration_date,'/');  
    }

    //construct function
    public function __construct() {
      $this->load_phrases($this->lang_id());
    }

}
?>