【问题标题】:Class to manipulate .ini files in php在 php 中操作 .ini 文件的类
【发布时间】:2011-10-05 14:14:30
【问题描述】:

我一直在玩我在网上找到的一个名为Config Magik 的php 类,我用它来将一些信息存储在一个INI 文件中,但最近在使用removeKey 时遇到了一些问题。我想知道是否有人可以为我指出一个同样有效或更好的类似课程。或者如果有更好的方法来解决这个问题。

这是我现在的功能,在疯狂地玩之后,所以它可能非常错误。

require_once('class.ConfigMagik.php');
$config = new ConfigMagik('config.ini', true, true);

if(!empty($_GET)){
    if(!is_writeable('config.ini')){
        echo 'Could not write to config.ini';
        return false;
    }
  //if there is no section parameter, we will not do anything.
  if(!isset($_GET['section'])){ 
    echo false; return false;
  } else {
    $section_name = $_GET['section'];
    unset($_GET['section']);     //Unset section so that we can use the GET variable to manipulate the other parameters in a foreach loop.
    if (!empty($_GET)){
      foreach ($_GET as $var => $value){
            echo $var.'='.$_GET[$var].'<br />';
            //Check if said variable $var exists in the section.
        if($config->get($var, $section_name) !== NULL){
            //Set variable value.
          try{
              $config->set($var, $value, $section_name);
              echo 'Setting variable '. $var.' to '.$value.' on section '.$section_name;
          } catch(Exception $e) {
                echo 'Could not set variable '.$var;
                echo $e;
                return false;
          }
        } else {
            echo $var.' does not exist <br />';
        }
      }
    }
    try{
      $section = $config->get($section_name); //Get the entire section so that we can manipulate it.
      echo '<pre>';print_r($section);echo '</pre>';
            foreach ($section as $title=>$value){
        if(!isset($_GET[$title]) && isset($section[$title])){
            try{
            $config->removeKey($title, $section_name);
            echo '<b>'.$title.'</b>: removed <br />';
            } catch(Exception $e){
                echo $e;
          }
        }
      }
    } catch(Exception $e){
        echo $e;
    }
    $config->save();
    //echo $config->toString('HTML');
    echo true;
    return true;
  }
} else { RUN SOME HTML }

它基本上保存了我从 GET 参数传递的设置,如果参数不存在,它应该删除它。当我到达 $config->removeKey($title, $section_name);在最后一个 try catch 语句中,它不会自动保存(因为它应该),所以我尝试运行 $config->save() 并最终得到了一个到处都有 section = array 的 ini 文件。任何建议都将不胜感激,因为过去几周我一直在网上学习 PHP,所以我相信我还有很长的路要走。

我确实已经将问题隔离到 $config->save() 部分,只是不知道如何解决。

提前致谢。

【问题讨论】:

    标签: php class configuration ini


    【解决方案1】:

    我过去一直在使用Zend_Config_IniZend_Config_Writer_Ini,并且对这些功能感到满意。您将从 Zend Framework 中提取整个 library/Zend/Config 文件夹并使 Zend_Exception 可用。

    【讨论】:

    • 我不想说这更好 - 但值得研究的替代方案...
    • 这很有趣。我读过它,应该试试看。
    • 从我刚才看到的情况来看,它至少大约有 4mbs 大。我的项目大约 1mb 左右,我想保持它很轻。还有其他建议吗?
    • 正如我所说 - 你不需要整个框架。只是 library/Zend/Config, library/Zend/Config.php, library/Zend/Exception.php
    • 好的,很高兴知道。我最终找到了解决我的问题的方法,我的功能现在按预期工作,但下次我会记住。 ZEND 框架似乎是共识。
    猜你喜欢
    • 2012-03-24
    • 2015-04-27
    • 1970-01-01
    • 2011-02-11
    • 2017-03-07
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多