使用PHP读取.info文件

时间:2011-11-29 10:51:20

标签: php

我创建了一个类似于你在drupal中的.info文件。

#Comment
Template Name = Valley

styles[] = styles/styles.css, styles/media.css
scripts[] = js/script.js

我想用PHP获取每个变量及其值。例如,我想将Template Name值放到名为Template Name的PHP变量中,如果mroe不是一个,则将styles[]值放在数组中。

我还需要避免它接收在文本之前定义为哈希#的注释。

这似乎有很多要问,但我真的不知道如何去做这件事。如果有人有解决方案,我会非常感激,但如果有人能指出我正确的方向,那就会有所帮助。

先谢谢!

3 个答案:

答案 0 :(得分:1)

如果你可以略微调整你的信息文件,你可以使用内置的PHP函数:

http://php.net/manual/en/function.parse-ini-file.php

#Comment
TemplateName = Valley

styles[] = "styles/styles.css"
styles[] = "styles/media.css"
scripts[] = "js/script.js"

将导致数组

答案 1 :(得分:1)

如果您所追求的只是“相似”,您可以查看parse_ini_file()功能。

答案 2 :(得分:0)

Drupal是一个很好的暗示:

function drupal_parse_info_file($filename) {
  $info = array();
  $constants = get_defined_constants();

  if (!file_exists($filename)) {
    return $info;
  }

  $data = file_get_contents($filename);
  if (preg_match_all('
    @^\s*                           # Start at the beginning of a line, ignoring leading whitespace
    ((?:
      [^=;\[\]]|                    # Key names cannot contain equal signs, semi-colons or square brackets,
      \[[^\[\]]*\]                  # unless they are balanced and not nested
    )+?)
    \s*=\s*                         # Key/value pairs are separated by equal signs (ignoring white-space)
    (?:
      ("(?:[^"]|(?<=\\\\)")*")|     # Double-quoted string, which may contain slash-escaped quotes/slashes
      (\'(?:[^\']|(?<=\\\\)\')*\')| # Single-quoted string, which may contain slash-escaped quotes/slashes
      ([^\r\n]*?)                   # Non-quoted string
    )\s*$                           # Stop at the next end of a line, ignoring trailing whitespace
    @msx', $data, $matches, PREG_SET_ORDER)) {
    foreach ($matches as $match) {
      // Fetch the key and value string
      $i = 0;
      foreach (array('key', 'value1', 'value2', 'value3') as $var) {
        $$var = isset($match[++$i]) ? $match[$i] : '';
      }
      $value = stripslashes(substr($value1, 1, -1)) . stripslashes(substr($value2, 1, -1)) . $value3;

      // Parse array syntax
      $keys = preg_split('/\]?\[/', rtrim($key, ']'));
      $last = array_pop($keys);
      $parent = &$info;

      // Create nested arrays
      foreach ($keys as $key) {
        if ($key == '') {
          $key = count($parent);
        }
        if (!isset($parent[$key]) || !is_array($parent[$key])) {
          $parent[$key] = array();
        }
        $parent = &$parent[$key];
      }

      // Handle PHP constants.
      if (isset($constants[$value])) {
        $value = $constants[$value];
      }

      // Insert actual value
      if ($last == '') {
        $last = count($parent);
      }
      $parent[$last] = $value;
    }
  }

  return $info;
}

Source,此函数是drupal代码库的一部分,drupal's license适用,仅用于此处的文档目的。