<?php
          /**
          * 讀取4中配置的表信息,現支持php.ini,xml.yaml
          */
          class Settings{
          var $_settings = array();
          /**
          ??? * 獲取某些設置的值
          ??? *
          ??? * @param unknown_type $var
          ??? * @return unknown
          ??? */
          ?????? function get($var) {
          ???????? $var = explode('.', $var);

          ???????? $result = $this->_settings;
          ???????? foreach ($var as $key) {
          ?????????????????? if (!isset($result[$key])) { return false; }

          ?????????????????? $result = $result[$key];
          ???????? }

          ???????? return $result;


          ??????? // trigger_error ('Not yet implemented', E_USER_ERROR);//引發一個錯誤
          ?????? }

          ?????? function load() {
          ??????????? trigger_error ('Not yet implemented', E_USER_ERROR);
          ?????? }


          }
          /**
          * 針對PHP的配置,如有配置文件
          * $file=
          <?php
          $db = array();

          // Enter your database name here:
          $db['name'] = 'test';

          // Enter the hostname of your MySQL server:
          $db['host'] = 'localhost';

          ?>


          具體調用:
          include ('settings.php'); //原始環境假設每個類為單獨的一個類名.php文件

          // Load settings (PHP)
          $settings = new Settings_PHP;
          $settings->load('config.php');

          echo 'PHP: ' . $settings->get('db.host') . '';

          *
          */
          Class Settings_PHP Extends Settings {
          function load ($file) {
          ???????? if (file_exists($file) == false) { return false; }

          ???????? // Include file
          ???????? include ($file);
          unset($file);?? //銷毀指定變量
          $vars = get_defined_vars(); //返回所有已定義變量的列表,數組,變量包括服務器等相關變量,
          //通過foreach吧$file引入的變量給添加到$_settings這個成員數組中去.
          foreach ($vars as $key => $val) {
          ???????? if ($key == 'this') continue;

          ???????? $this->_settings[$key] = $val;
          }

          }

          ?

          }


          //////////////////////讀取INI文件,主要用到parser_ini_file函數,該函數返回一個數組,如第二個參數為true時則返回多維數組/////////////////////////////////////////
          /**
          * ini例子:
          * [db]
          name = test
          host = localhost
          調用例子:
          $settings = new Settings_INI;
          $settings->load('config.ini');
          echo 'INI: ' . $settings->get('db.host') . '';

          *
          */
          Class Settings_INI Extends Settings {
          function load ($file) {
          ???????? if (file_exists($file) == false) { return false; }
          ???????? $this->_settings = parse_ini_file ($file, true);
          }
          }

          //////////////////////讀取XML文件,需要用到XML_PARSER//////////////////////////////////////////////////////////
          /**
          * XML例子:
          ??? <?xml version="1.0" encoding="UTF-8"?>
          <settings>
          ???????? <db>
          ?????????????????? <name>test</name>
          ?????????????????? <host>localhost</host>
          ???????? </db>
          </settings>
          調用例子:
          // Load settings (XML)
          $settings = New Settings_XML;
          $settings->load('config.xml');
          echo 'XML: ' . $settings->get('db.host') . '';

          *
          */
          Class Settings_XML Extends Settings {
          function load ($file) {
          ?????? if (file_exists($file) == false) { return false; }

          ?????? /**xmllib.php為PHP XML Library, version 1.2b,相關連接:http://keithdevens.com/software/phpxml
          ?????? xmllib.php主要特點是把一個數組轉換成一個xml或吧xml轉換成一個數組
          ?????? XML_unserialize:把一個xml給轉換 成一個數組
          ?????? XML_serialize:把一個數組轉換成一個xml
          ?????? 自PHP5起,simpleXML就很不錯,但還是不支持將xml轉換成數組的功能,所以xmlLIB還是很不錯的.
          ?????? */
          ?????? include ('xmllib.php');?
          ?????? $xml = file_get_contents($file);
          ?????? $data = XML_unserialize($xml);
          ?????? $this->_settings = $data['settings'];
          }

          }
          //////////////////////////////////讀取YAML格式文件///////////////////////////////////////////////
          /**
          使用YAML必須使用到SPYC這個庫,相關鏈接在http://spyc.sourceforge.net/
          YAML配置例子:
          db:
          ?? name: test
          ?? host: localhost


          */
          Class Settings_YAML Extends Settings {
          function load ($file) {
          ?????? if (file_exists($file) == false) { return false; }

          ?????? include ('spyc.php');
          ?????? $this->_settings = Spyc::YAMLLoad($file);
          }

          }

          posted on 2007-12-23 23:49 -274°C 閱讀(12022) 評論(4)  編輯  收藏 所屬分類: PHP


          FeedBack:
          # re: PHP讀取4種配置文件(php,ini,yaml,xml)
          2008-05-17 19:46 | Happy漫步者
          可以借鑒下 不錯  回復  更多評論
            
          # re: PHP讀取4種配置文件(php,ini,yaml,xml)
          2012-11-12 14:42 | maosong
          用面向對象的方式包裝了一些函數,實際使用價值較低。  回復  更多評論
            
          # re: PHP讀取4種配置文件(php,ini,yaml,xml)
          2012-12-31 04:31 | 彭杰
          用了你的讀ini的方式 蠻好的,就是有個問題 我有個ini的字段內容是 xx|yy|zz讀出來變成了3 求指教。  回復  更多評論
            
          # re: PHP讀取4種配置文件(php,ini,yaml,xml)
          2013-01-05 00:02 | 彭杰
          sgtp=220.170.15.11
          讀出來的是 220.170.15.11

          sgtp='220.170.15.8|222.243.161.111'
          讀出來的是222  回復  更多評論
            

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914173
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 莱芜市| 兴城市| 巴彦淖尔市| 调兵山市| 鲜城| 白河县| 琼海市| 柳林县| 武城县| 岐山县| 辽宁省| 淮安市| 嘉黎县| 和田市| 漳平市| 平远县| 平定县| 股票| 行唐县| 张家川| 塔城市| 盐池县| 龙里县| 榆中县| 宜章县| 濮阳市| 万载县| 金坛市| 合阳县| 西林县| 尚志市| 察哈| 顺义区| 会同县| 苗栗市| 清丰县| 昭觉县| 利辛县| 渭南市| 渭源县| 娄烦县|