2010-11-02 5 views
1

Мне нужно сохранить некоторые данные в ini-файле, и у меня возникла проблема. Это не трудно читать DAT из ини файла, как PHP предоставляет встроенную функцию для этого:Сохраните файл ini с комментариями

<?php 
ini_parse(); 
?> 

Проблема заключается в том, что мне нужно, чтобы сохранить данные в файл INI, в то время как (предпочтительно), сохраняющих commments , Я хотел бы особо сохранить этот комментарий в верхней части:

;<?php die(); ?> 

Я уверен, что вы можете угадать причину этого, но в случае, если вы не можете понять это, я не хочу этого файла будет предложено непосредственно. Я просто хотел бы прочитать значения INI из него, используя другой php-скрипт.

Однако, если нет возможности сохранить комментарии, мне все равно нужно хранить данные в INI-файле, поэтому мне все еще нужен класс для сохранения данных в INI-файле.

Кто-нибудь знает класс, который может это сделать?

+0

Почему бы не просто поместить файл INI в каталог, к которому внешний мир не может получить доступ? – casablanca

+0

Включите интерпретатор PHP для файлов .ini, чтобы вы могли использовать PHP для предотвращения запуска файлов .ini. –

+0

Условия этого скрипта делают его непревзойденным для защиты файла, используя метод выше, и даже если он был защищен, мне все равно нужно сохранять данные в файл в любом случае. – xaav

ответ

3

Этот комментарий не поможет защитить ваш файл от чтения в веб-браузере, если только вы не настроили сервер для анализа файлов ini в качестве источника php. Лучшая идея - разместить этот файл вне webroot, в защищенном паролем каталоге или настроить один каталог, чтобы не обслуживать ini-файлы.

Что касается записи данных, то эта функция будет делать для простых массивов:

function write_ini_file($file, array $options){ 
    $tmp = ''; 
    foreach($options as $section => $values){ 
     $tmp .= "[$section]\n"; 
     foreach($values as $key => $val){ 
      if(is_array($val)){ 
       foreach($val as $k =>$v){ 
        $tmp .= "{$key}[$k] = \"$v\"\n"; 
       } 
      } 
      else 
       $tmp .= "$key = \"$val\"\n"; 
     } 
     $tmp .= "\n"; 
    } 
    file_put_contents($file, $tmp); 
    unset($tmp); 
} 

Так массив как это:

$options = array(
    'ftp_cfg' => array(
     'username' => 'user', 
     'password' => 'pass', 
     'hostname' => 'localhost', 
     'port'  => 21 
    ), 
    'other_cfg' => array(
     'banned_emails' => array(
      '[email protected]', 
      '[email protected]' 
     ), 
     'ini_version' => 1.1 
    ) 
); 

будет повернут к:

[ftp_cfg] 
username = "user" 
password = "pass" 
hostname = "localhost" 
port = "21" 

[other_cfg] 
banned_emails[0] = "[email protected]" 
banned_emails[1] = "[email protected]" 
ini_version = "1.1" 
+0

Большое вам спасибо! Только то, что мне нужно! Несмотря на то, что он не поддерживает комментарии, я не ожидал, что это произойдет. – xaav

+0

Даже если вы используете его для очень простых массивов - он должен хотя бы избежать двойных кавычек. – Blaise

0

Если ваша цель состоит в том, чтобы сохранить die(), единственный способ, которым я знаю, - поместить его в указанное значение.

fake_value = "<?php die(); ?>"; 

Я не думаю, что это возможно, чтобы сохранить комментарии, используя parse_ini_file(). Для этого вам нужно будет создать собственный парсер. Пользовательские примечания по manual page могут быть полезными.

+0

Это действительно не помогает мне, поскольку вы не предоставили никаких функций или даже советов, чтобы дать мне любую идею о том, как я должен писать значения INI в файл. – xaav

0

С .htaccess файл, вы можете отказаться от доступа к этому файлу.

+2

Пожалуйста, держите ваши ответы на английском языке. –

Смежные вопросы