PHP是否允许* .properties文件与Java一样?

时间:2011-05-05 15:11:44

标签: java php

有没有办法在PHP中使用* .properties文件,就像在Java中一样?我想在属性或XML文件中存储一些应用程序级常量,并在我的代码中轻松调用它们。非常感谢您的指导。感谢。

7 个答案:

答案 0 :(得分:17)

PHP可以使用parse_ini_file()本地加载和解析.ini个文件。

您还可以使用define()在包含文件中设置常量。

如果您设置了XML,请查看PHP的XML功能。最简单的解决方案可能是使用SimpleXML

答案 1 :(得分:7)

您还可以使用包含数组的PHP文件来存储数据。 例如:

的config.php

<?php 
return array(
    'dbhost' => 'localhost',
    'title'   => 'My app'
);

然后在另一个文件中:

$config = require 'config.php':
echo $config['title'];

答案 2 :(得分:6)

parse_ini_file与Java环境中的*.properties文件无关。

我创建了这个函数,它与Java中的等价函数完全相同:

function parse_properties($txtProperties) {
    $result = array();
    $lines = split("\n", $txtProperties);
    $key = "";
    $isWaitingOtherLine = false;

    foreach($lines as $i=>$line) {
        if(empty($line) || (!$isWaitingOtherLine && strpos($line,"#") === 0)) continue;

        if(!$isWaitingOtherLine) {
            $key = substr($line,0,strpos($line,'='));
            $value = substr($line,strpos($line,'=') + 1, strlen($line));
        } else {
            $value .= $line;
        }

        /* Check if ends with single '\' */
        if(strrpos($value,"\\") === strlen($value)-strlen("\\")) {
            $value = substr($value, 0, strlen($value)-1)."\n";
            $isWaitingOtherLine = true;
        } else {
            $isWaitingOtherLine = false;
        }

        $result[$key] = $value;
        unset($lines[$i]);
    }

    return $result;
}

此功能首先是posted on my blog

答案 3 :(得分:3)

好吧,你可以完美地将一些配置放在属性文件中并自己进行解析。但在PHP中,它并不是适当的格式。

我会定义一些常量并将它们放在一个单独的php配置文件(如config.php)中,并在需要的地方包含它。

其他选项是将配置实际放入xml文件中并使用xml library读取它。 YAMLphp.net)也是简单易读配置的常用选项。

答案 4 :(得分:2)

据我所知,没有PHP内置函数来读取和处理.properties文件。如果您在PHP中编写的应用程序需要读取Java .properties文件,则需要通过读取文件并创建自己的.properties解析器来编写自己的解决方案。

否则,如此处其他成员所提到的,您可以将配置信息存储到.ini文件中。 PHP提供了加载和解析.ini文件的本机函数。

如果您愿意,可以使用PHP XML解析器(PHP Manual Function Reference XML Manipulation)将信息存储到XML文件中。

就个人而言,我更喜欢将配置/应用程序常量值存储到数组中。我创建了一个处理配置文件的Configuration类。

这里有一个例子:

配置文件示例(例如:config.php)

<?php
    // Typical configuration file
    $config['database']['type']         = 'mysql';
    $config['database']['host']         = 'localhost';
    $config['database']['username']     = 'root';
    $config['database']['password']     = 'your_password';
    $config['database']['database']     = 'your_project';
    $config['date']['timezone']         = 'America/Montreal';
?>    

课程配置

<?php
    class Configuration
    {
        protected $configuration;

        function __construct($filename)
        {
            // CFG_PATH : i.e --> define('CFG_PATH',dirname(__FILE__) . '/cfg/');
            require(CFG_PATH . $filename);
            $this->setConfiguration($config);
        }

        public function getConfiguration($configuration)
        {
            return $this->configuration[$configuration];
        }

        public function setConfiguration($configuration)
        {
            $this->configuration = $configuration;
        }
    }
?>

典型用法示例

<?php

    // Your class definitions, variables, functions...

    function __construct() {

        $this->configuration = new Configuration(CFG_FILE);
        $this->set_Timezone($this->configuration->getConfiguration('date'));

    }

    private function set_Timezone($configuration)
    {
        date_default_timezone_set($configuration['timezone']);
    }

?>

其他示例(Controller和DAO)

<强>控制器

<?php

    protected function doPost() {
        ...
        $configuration = new Configuration(CFG_FILE);
        $dao = new DAO($configuration->getConfiguration('database'));
        ...
    }

?>  

DAO示例

<?php

    function __construct($configuration) {
        // Build DSN (Data Source Name) string 
        if ($configuration['type'] == 'mysql') {
            $this->dsn = '(type):host=(host);dbname=(database);charset=UTF8';
            $this->dsn = str_replace('(type)', $configuration['type'], $this->dsn);
            $this->dsn = str_replace('(host)', $configuration['host'], $this->dsn);
            $this->dsn = str_replace('(database)', $configuration['database'], $this->dsn);
            $this->options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'');
            try
            {
                $this->databaseHandle = new PDO($this->dsn, $configuration['username'], $configuration['password'], $this->options);
            }
            catch (PDOException $e)
            {
                ...
            }
        }
        else
        {
            ... 
        }
    }

?>

如果您在Java中使用Spring框架并且您想在PHP中使用类似的messages.properties解决方案,则可以调整上面提到的相同解决方案。当然,行为不会与Java相同,但是,使用Locale类,您可以根据客户端所在的位置创建处理PHP应用程序中的消息/标签的函数。

使用基于数组的这种解决方案,我认为这将帮助您在应用程序中定义所需的值并组织配置数据。当然,还有很多其他方法可以达到这个目的,但我认为解决方案是有效的。

答案 5 :(得分:1)

在PHP .ini文件中提供几乎相同的功能。有一些简单的方法可以从这些文件中读取常量。

此外,大多数PHP框架都使用扩展名为.php。

的配置文件来实现它

例如在cake php中我们有Configure类,它提供类似Configure :: read('VarName')和Configure :: write('VarName',VarValue);

一旦编写,就可以在文件包含范围内访问。

答案 6 :(得分:1)

function getLocale($file){
    $locales = array();
    $accessible = fopen($file, "r");
    if (!$accessible) return null;
    while (($line = fgets($accessible)) !== false) {
        $pos = strpos($line, '=');
        if (!$pos) continue;
        $name = substr($line, 0, $pos);
        $value = substr($line, $pos + 1, strlen($line));
        $locales[$name] = $value;
    }
    return $locales;
}
getLocale('lang/eng.properties');