使用Zend_Config保存INI文件后的双引号问题

时间:2010-11-23 06:55:37

标签: zend-framework

当我想编写并保存INI文件时,我遇到了问题。我使用Zend_Config_Ini来处理这个过程。

问题是我总是在使用整数或数字保存过程的每一行的值中得到“双引号”。这是示例

原始的application.ini文件

resources.session.use_only_cookies = 1
resources.session.remember_me_seconds = 86400

运行这些代码后

$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini',
                                      null,
                                      array('skipExtends'        => true,
                                            'allowModifications' => true));

        // Modify a value
$config->production->resources->db->adapter = 'foobar';

        // Write the config file
$writer = new Zend_Config_Writer_Ini(array('config' => $config,
                                           'filename' => APPLICATION_PATH . '/configs/application.ini'));
$writer->write();

application.ini行变为

resources.session.use_only_cookies = "1"  //double quote appears T_T
resources.session.remember_me_seconds = "86400"  //double quote appears T_T

我想要的是整数值必须保持不变(没有双引号)。

任何人都可以帮我解决这个问题吗?

非常感谢您提前

2 个答案:

答案 0 :(得分:3)

正如Phil-Brown所说,当使用parse_ini_file()读取PHP中的ini文件时,总会得到字符串。此外,对于任何非字母数字字符的值,您应该用双引号括起来,因此Zend_Config_Writer会包含所有值。

答案 1 :(得分:1)

无论如何,

在我的解决方案中,我不得不在Zend中删除一些代码行。我更改的文件是 \ Zend \ Config \ Writer \ Ini.php ,第150行的方法 _prepareValue()如下所示

   protected function _prepareValue($value)
    {
        /*
         I comment it             

         if (is_integer($value) || is_float($value)) {
            return $value;
        } elseif (is_bool($value)) {
            return ($value ? 'true' : 'false');
        } else {
            return '"' . addslashes($value) .  '"';
        }*/

        return $value; // my line
    }

只需评论Zend的原始代码,然后传递并返回$ value。

因此,通过更改此文件,我永远不会再获得任何双引号的字符串,布尔值或偶数。这就是我想要的。 :)

谢谢大家。